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/

Reply via email to