summaryrefslogtreecommitdiff
path: root/Tools/Source/TianoTools/CompressDll/CompressDll.c
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Source/TianoTools/CompressDll/CompressDll.c')
-rw-r--r--Tools/Source/TianoTools/CompressDll/CompressDll.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/Tools/Source/TianoTools/CompressDll/CompressDll.c b/Tools/Source/TianoTools/CompressDll/CompressDll.c
new file mode 100644
index 0000000000..783587f654
--- /dev/null
+++ b/Tools/Source/TianoTools/CompressDll/CompressDll.c
@@ -0,0 +1,89 @@
+#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
+