X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Fstringbuf.c;h=5cbe17fdb560b003b3e3d25136e2ac73497e3da6;hb=96161e4d66bf6c1da07585920cd43f6a0a4f950e;hp=5d196112385d5a11883126692be869720b585d90;hpb=cb9b83d5083a4ee3ef9a8783a3524d87cfa25ca3;p=citadel.git diff --git a/libcitadel/lib/stringbuf.c b/libcitadel/lib/stringbuf.c index 5d1961123..5cbe17fdb 100644 --- a/libcitadel/lib/stringbuf.c +++ b/libcitadel/lib/stringbuf.c @@ -2884,8 +2884,10 @@ void *StrBufNewStreamContext(eStreamType type) err = inflateInit(&stream->zstream); - if (err != Z_OK) - return NULL;/// tODO cleanup + if (err != Z_OK) { + StrBufDestroyStreamContext(type, (void**)&stream); + return NULL; + } return stream; } @@ -2898,27 +2900,25 @@ void *StrBufNewStreamContext(eStreamType type) memset(stream, 0, sizeof(z_enc_stream)); stream->OutBuf.BufSize = 4*SIZ; /// todo 64 stream->OutBuf.buf = (char*)malloc(stream->OutBuf.BufSize); - /* write gzip header * / + /* write gzip header */ stream->OutBuf.BufUsed = snprintf (stream->OutBuf.buf, stream->OutBuf.BufSize, "%c%c%c%c%c%c%c%c%c%c", gz_magic[0], gz_magic[1], Z_DEFLATED, - 0 /*flags * / , 0, 0, 0, 0 /*time * / , 0 /* xflags * / , + 0 /*flags */ , 0, 0, 0, 0 /*time */ , 0 /* xflags */ , OS_CODE); -/* + err = deflateInit2(&stream->zstream, ZLibCompressionRatio, Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); -*/ - err = deflateInit(&stream->zstream, - ZLibCompressionRatio); - - if (err != Z_OK) - return NULL;/// tODO cleanup + if (err != Z_OK) { + StrBufDestroyStreamContext(type, (void**) &stream); + return NULL; + } return stream; } case eEmtyCodec: @@ -2931,6 +2931,9 @@ void *StrBufNewStreamContext(eStreamType type) void StrBufDestroyStreamContext(eStreamType type, void **vStream) { + if ((vStream == NULL) || (*vStream==NULL)) { + return; + } switch (type) { case eBase64Encode: @@ -2959,7 +2962,7 @@ void StrBufDestroyStreamContext(eStreamType type, void **vStream) } } -void StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, const char* pIn, long pInLen, void *vStream, int LastChunk) +int StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, const char* pIn, long pInLen, void *vStream, int LastChunk) { switch (type) @@ -3071,6 +3074,7 @@ void StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, con (In->Buf->BufUsed - stream->zstream.avail_in); } } + return (LastChunk && (err != Z_FINISH)); } break; @@ -3144,6 +3148,7 @@ void StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, con } break; /// TODO } + return 0; } /**