summaryrefslogtreecommitdiff
path: root/Tools/CCode/Source/CompressDll/CompressDll.c
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/CCode/Source/CompressDll/CompressDll.c')
-rw-r--r--Tools/CCode/Source/CompressDll/CompressDll.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/Tools/CCode/Source/CompressDll/CompressDll.c b/Tools/CCode/Source/CompressDll/CompressDll.c
new file mode 100644
index 0000000000..cc06f26c05
--- /dev/null
+++ b/Tools/CCode/Source/CompressDll/CompressDll.c
@@ -0,0 +1,105 @@
+/** @file
+ Compression DLL used by PCD Tools
+
+ Copyright (c) 2006, Intel Corporation All rights reserved.
+ This program and the accompanying materials are licensed and made available
+ under the terms and conditions of the BSD License which accompanies this
+ distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+#if defined(__GNUC__)
+typedef long long __int64;/*For cygwin build*/
+#endif
+#include "CompressDll.h"
+#include "EfiCompress.h"
+
+extern
+EFI_STATUS
+Compress (
+ IN UINT8 *SrcBuffer,
+ IN UINT32 SrcSize,
+ IN UINT8 *DstBuffer,
+ IN OUT UINT32 *DstSize
+ );
+
+JNIEXPORT jbyteArray JNICALL Java_org_tianocore_framework_tasks_Compress_CallCompress
+(JNIEnv *env, jobject obj, jbyteArray SourceBuffer, jint SourceSize, jstring path)
+{
+ char* DestBuffer;
+ int DestSize;
+ int Result;
+ char *InputBuffer;
+ jbyteArray OutputBuffer;
+ jbyte *TempByte;
+
+ DestSize = 0;
+ DestBuffer = NULL;
+
+ TempByte = (*env)->GetByteArrayElements(env, SourceBuffer, 0);
+ InputBuffer = (char*) TempByte;
+
+
+ //
+ // First call compress function and get need buffer size
+ //
+
+ Result = Compress (
+ (char*) InputBuffer,
+ SourceSize,
+ DestBuffer,
+ &DestSize
+ );
+
+ if (Result = EFI_BUFFER_TOO_SMALL) {
+ DestBuffer = malloc (DestSize);
+ }
+
+ //
+ // Second call compress and get the DestBuffer value
+ //
+ Result = Compress(
+ (char*) InputBuffer,
+ SourceSize,
+ DestBuffer,
+ &DestSize
+ );
+
+ //
+ // new a MV array to store the return compressed buffer
+ //
+ OutputBuffer = (*env)->NewByteArray(env, DestSize);
+ (*env)->SetByteArrayRegion(env, OutputBuffer,0, DestSize, (jbyte*) DestBuffer);
+
+ //
+ // Free Ouputbuffer.
+ //
+ free (DestBuffer);
+
+
+ if (Result != 0) {
+ return NULL;
+ } else {
+ return OutputBuffer;
+ }
+}
+
+#ifdef _MSC_VER
+BOOLEAN
+__stdcall
+DllMainCRTStartup(
+ unsigned int hDllHandle,
+ unsigned int nReason,
+ void* Reserved
+)
+{
+ return TRUE;
+}
+#else
+#ifdef __GNUC__
+#endif
+#endif
+