2006-07-25 17:27:10 +02:00
|
|
|
/** @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.
|
|
|
|
|
|
|
|
**/
|
2006-08-04 05:17:05 +02:00
|
|
|
#if defined(__GNUC__)
|
|
|
|
typedef long long __int64;/*For cygwin build*/
|
|
|
|
#endif
|
2006-04-22 00:54:32 +02:00
|
|
|
#include "CompressDll.h"
|
2006-12-07 06:29:07 +01:00
|
|
|
#include "Compress.h"
|
2006-04-22 00:54:32 +02:00
|
|
|
|
|
|
|
extern
|
|
|
|
EFI_STATUS
|
2006-12-07 12:32:26 +01:00
|
|
|
EfiCompress (
|
2006-04-22 00:54:32 +02:00
|
|
|
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
|
|
|
|
//
|
|
|
|
|
2006-12-07 12:32:26 +01:00
|
|
|
Result = EfiCompress (
|
2006-06-16 13:42:42 +02:00
|
|
|
(char*) InputBuffer,
|
|
|
|
SourceSize,
|
|
|
|
DestBuffer,
|
|
|
|
&DestSize
|
|
|
|
);
|
2006-04-22 00:54:32 +02:00
|
|
|
|
|
|
|
if (Result = EFI_BUFFER_TOO_SMALL) {
|
2006-06-16 13:42:42 +02:00
|
|
|
DestBuffer = malloc (DestSize);
|
2006-04-22 00:54:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Second call compress and get the DestBuffer value
|
|
|
|
//
|
2006-12-07 12:32:26 +01:00
|
|
|
Result = EfiCompress(
|
|
|
|
(char*) InputBuffer,
|
2006-06-16 13:42:42 +02:00
|
|
|
SourceSize,
|
|
|
|
DestBuffer,
|
|
|
|
&DestSize
|
2006-12-07 12:32:26 +01:00
|
|
|
);
|
2006-04-22 00:54:32 +02:00
|
|
|
|
|
|
|
//
|
|
|
|
// 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
|
|
|
|
)
|
|
|
|
{
|
2006-06-16 13:42:42 +02:00
|
|
|
return TRUE;
|
2006-04-22 00:54:32 +02:00
|
|
|
}
|
|
|
|
#else
|
|
|
|
#ifdef __GNUC__
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|