X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=libcitadel%2Flib%2Fstringbuf.c;fp=libcitadel%2Flib%2Fstringbuf.c;h=7b2c663656e08fd874d788250c80a5333acd2877;hp=9ebc2dd593616ef94b2c9f94cd46563e8d188c87;hb=a9876b7a9950d597b18716250fcd39856efa3153;hpb=17facca88daba3788c5fcf6ffc8d57f3ed7a5905 diff --git a/libcitadel/lib/stringbuf.c b/libcitadel/lib/stringbuf.c index 9ebc2dd59..7b2c66365 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; } @@ -2913,8 +2915,10 @@ void *StrBufNewStreamContext(eStreamType type) -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); - if (err != Z_OK) - return NULL;/// tODO cleanup + if (err != Z_OK) { + StrBufDestroyStreamContext(type, (void**) &stream); + return NULL; + } return stream; } case eEmtyCodec: @@ -2927,6 +2931,9 @@ void *StrBufNewStreamContext(eStreamType type) void StrBufDestroyStreamContext(eStreamType type, void **vStream) { + if (*vStream) { + return; + } switch (type) { case eBase64Encode: @@ -2955,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) @@ -3067,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; @@ -3140,6 +3148,7 @@ void StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, con } break; /// TODO } + return 0; } /**