Got around the global issue by doing this:
------------
static UInt16 FindZLibHandle(void)
{
UInt16 error, vRefNum;
Boolean loaded = false;
vRefNum = sysInvalidRefNum;
/* First try to find the library. */
error = SysLibFind("Zlib", &vRefNum);
/* If not found, load the library instead. */
if (error == sysErrLibNotFound)
{
error = SysLibLoad('libr', 'ZLib', &vRefNum);
loaded = true;
}
if (error == errNone)// Library is loaded let's open it
{
error = ZLibOpen (vRefNum);
if (error != errNone)
{
if (loaded)
{
SysLibRemove(vRefNum);
}
vRefNum = sysInvalidRefNum;
}
}
return vRefNum;
}
------------
But I am still getting an error here (low memory write 0x00000000):
ret = ZLibdeflateinit2(ZLib, &strm, level, Z_DEFLATED, 13, 6,
Z_DEFAULT_STRATEGY, ZLIB_VERSION, sizeof(z_stream));
The routine code is:
-------------
Err CompressInfo(MemPtr finalData, Char *in)
{
Char *out;
Char MaxBuf[10];
UInt32 BufL = MAX_BUFFER_SIZE;
Bytef *Buffer = NULL;
UInt32 NewSize;
Int16 level = 9;
Int16 ret, flush;
UInt16 have;
z_stream strm;
UInt16 OrigSize;
Char NumBuf[10];
Err Error=LibErr;
UInt16 ZLib = FindZLibHandle();
// UInt16 ZLib = SharedZLibHandle();
if (ZLib == sysInvalidRefNum)
// if (ZLib == 0)
return FrmAlert(LibNotInstalledAlert); // + 1;
Buffer = (Bytef *)MemPtrNew(MAX_BUFFER_SIZE);
OrigSize = StrLen(in) + 1;
out = static_cast<Char *>(MemPtrNew(OrigSize));
if (OrigSize > MAX_BUFFER_SIZE)
{
StrIToA(MaxBuf, MAX_BUFFER_SIZE);
StrIToA(NumBuf, OrigSize);
FrmCustomAlert(TooBigAlert, NumBuf, MaxBuf, NULL);
return LibErr;
}
//MemMove(in, pText, OrigSize);
MemSet(&strm, sizeof(strm), 0);
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
ret = ZLibdeflateinit2(ZLib, &strm, level, Z_DEFLATED, 13, 6,
Z_DEFAULT_STRATEGY, ZLIB_VERSION, sizeof(z_stream));
// ret = ZLibdeflateinit2(ZLib,
// &strm, Z_DEFAULT_COMPRESSION, /* user
provided */
// Z_DEFLATED, 13, 6, Z_DEFAULT_STRATEGY,
ZLIB_VERSION, sizeof(z_stream));
// ret = deflateInit(&strm, level);
if (ret != Z_OK)
{
FrmCustomAlert(GenericAlert, "Opps ... problem initilazing
compression", "", "");
return ret;
}
do
{
strm.avail_in = OrigSize;
flush = Z_FINISH;
strm.next_in = (Bytef *) in;
do
{
strm.avail_out = MAX_BUFFER_SIZE;
strm.next_out = (Bytef *)out;
ret = ZLibdeflate(SharedZLibHandle(), &strm,
Z_FULL_FLUSH);
if(ret == Z_STREAM_ERROR)
return ret;
have = strm.total_out;
NewSize = have + 2;
// have = MAX_BUFFER_SIZE - strm.avail_out;
if (MemPtrResize(finalData, NewSize) == errNone)
{
MemMove (finalData, out, NewSize);
}
}
while (strm.avail_out == 0);
}
while (flush != Z_FINISH);
ZLibdeflateend(SharedZLibHandle(), &strm);
// deflateEnd(&strm);
SharedZLibClose();
return LibNoErr;
}
-------------
Any ideas on how to fix?
Thanks
Greg
--
For information on using the ACCESS Developer Forums, or to unsubscribe, please
see http://www.access-company.com/developers/forums/