Browse Source
Programs using xmalloc() but not git_inflate() require -lz on the linker command line because git_inflate() is in the same translation unit as xmalloc(). Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Jonathan Nieder
14 years ago
committed by
Junio C Hamano
3 changed files with 62 additions and 60 deletions
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
/* |
||||
* zlib wrappers to make sure we don't silently miss errors |
||||
* at init time. |
||||
*/ |
||||
#include "cache.h" |
||||
|
||||
void git_inflate_init(z_streamp strm) |
||||
{ |
||||
const char *err; |
||||
|
||||
switch (inflateInit(strm)) { |
||||
case Z_OK: |
||||
return; |
||||
|
||||
case Z_MEM_ERROR: |
||||
err = "out of memory"; |
||||
break; |
||||
case Z_VERSION_ERROR: |
||||
err = "wrong version"; |
||||
break; |
||||
default: |
||||
err = "error"; |
||||
} |
||||
die("inflateInit: %s (%s)", err, strm->msg ? strm->msg : "no message"); |
||||
} |
||||
|
||||
void git_inflate_end(z_streamp strm) |
||||
{ |
||||
if (inflateEnd(strm) != Z_OK) |
||||
error("inflateEnd: %s", strm->msg ? strm->msg : "failed"); |
||||
} |
||||
|
||||
int git_inflate(z_streamp strm, int flush) |
||||
{ |
||||
int ret = inflate(strm, flush); |
||||
const char *err; |
||||
|
||||
switch (ret) { |
||||
/* Out of memory is fatal. */ |
||||
case Z_MEM_ERROR: |
||||
die("inflate: out of memory"); |
||||
|
||||
/* Data corruption errors: we may want to recover from them (fsck) */ |
||||
case Z_NEED_DICT: |
||||
err = "needs dictionary"; break; |
||||
case Z_DATA_ERROR: |
||||
err = "data stream error"; break; |
||||
case Z_STREAM_ERROR: |
||||
err = "stream consistency error"; break; |
||||
default: |
||||
err = "unknown error"; break; |
||||
|
||||
/* Z_BUF_ERROR: normal, needs more space in the output buffer */ |
||||
case Z_BUF_ERROR: |
||||
case Z_OK: |
||||
case Z_STREAM_END: |
||||
return ret; |
||||
} |
||||
error("inflate: %s (%s)", err, strm->msg ? strm->msg : "no message"); |
||||
return ret; |
||||
} |
Loading…
Reference in new issue