Hier mein Code:
zlib_stuff.cpp
Code:
#ifndef ZL_C
#define ZL_C
#include <zlib.h>
#include <string.h>
#include <stdlib.h>
#include "zlib_stuff.h"
void CompressData(compress_data *input)
{
if((input->size==0)||(input->data==NULL))return;
Byte *uncompressed, *compressed;
unsigned long cLen;
int retval;
input->compressed=false;
uncompressed = (Byte *) strdup(input->data);
if((compressed = (Byte *) malloc(input->size+1024)) == NULL)return;
retval = compress2(compressed, &cLen, uncompressed, sizeof(uncompressed)+1 ,9);
if((retval==Z_MEM_ERROR)||(retval==Z_BUF_ERROR))return;
if(input->data!=NULL)free(input->data);
input->data=strdup((char *)compressed);
input->size=cLen;
input->compressed=true;
return;
}
void DecompressData(compress_data *input)
{
Byte *extracted=NULL;
unsigned long eLen=input->size;
int retval = 4;
Byte *compressed;
input->compressed=true;
compressed = (Byte *) strdup(input->data);
while((eLen < 100000) && (retval != Z_OK)){
if(extracted != NULL)free(extracted);
if((extracted = (Byte *) malloc(eLen)) == NULL)return;
retval = uncompress(extracted, &eLen, compressed, input->size);
if((retval==Z_MEM_ERROR)||(retval==Z_BUF_ERROR))break;
if(retval != Z_OK)eLen *= 2;
}
free(input->data);
input->data = (char *) strdup((char *)extracted);
input->size=eLen;
input->compressed=false;
return;
}
#endif
zlib_stuff.h
Code:
#ifndef ZL_H
#define ZL_H
struct compress_data
{
char *data;
unsigned long size;
bool compressed;
};
void CompressData(compress_data *input);
void DecompressData(compress_data *input);
#endif
Aufruf:
Code:
struct compress_data compr;
compr.compressed=true;
compr.data=(char *)strdup("Zlib teeeest!\nBla bla bla...\d\nHallo: Zliiib\n");
compr.size=strlen(compr.data);
CompressData(&compr);
printf("Compressed: %s\n",compr.data);
Mein gesamter Code in der Anwendung funzt problemlos...es crasht immer nur bei Aufruf von compress() oder compress2()...
Lesezeichen