be9d7e963b88ac20cf4639de9dd4ddaaf3ff7a80
   1/*
   2 * zlib wrappers to make sure we don't silently miss errors
   3 * at init time.
   4 */
   5#include "cache.h"
   6
   7static const char *zerr_to_string(int status)
   8{
   9        switch (status) {
  10        case Z_MEM_ERROR:
  11                return "out of memory";
  12        case Z_VERSION_ERROR:
  13                return "wrong version";
  14        case Z_NEED_DICT:
  15                return "needs dictionary";
  16        case Z_DATA_ERROR:
  17                return "data stream error";
  18        case Z_STREAM_ERROR:
  19                return "stream consistency error";
  20        default:
  21                return "unknown error";
  22        }
  23}
  24
  25void git_inflate_init(z_streamp strm)
  26{
  27        int status = inflateInit(strm);
  28
  29        if (status == Z_OK)
  30                return;
  31        die("inflateInit: %s (%s)", zerr_to_string(status),
  32            strm->msg ? strm->msg : "no message");
  33}
  34
  35void git_inflate_end(z_streamp strm)
  36{
  37        int status = inflateEnd(strm);
  38
  39        if (status == Z_OK)
  40                return;
  41        error("inflateEnd: %s (%s)", zerr_to_string(status),
  42              strm->msg ? strm->msg : "no message");
  43}
  44
  45int git_inflate(z_streamp strm, int flush)
  46{
  47        int status = inflate(strm, flush);
  48
  49        switch (status) {
  50        /* Z_BUF_ERROR: normal, needs more space in the output buffer */
  51        case Z_BUF_ERROR:
  52        case Z_OK:
  53        case Z_STREAM_END:
  54                return status;
  55
  56        case Z_MEM_ERROR:
  57                die("inflate: out of memory");
  58        default:
  59                break;
  60        }
  61        error("inflate: %s (%s)", zerr_to_string(status),
  62              strm->msg ? strm->msg : "no message");
  63        return status;
  64}