zlib wrapper: refactor error message formatter
authorJunio C Hamano <gitster@pobox.com>
Fri, 10 Jun 2011 17:31:34 +0000 (10:31 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 10 Jun 2011 17:31:34 +0000 (10:31 -0700)
Before refactoring the main part of the wrappers, first move the
logic to convert error status that come back from zlib to string
to a helper function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
zlib.c

diff --git a/zlib.c b/zlib.c
index c4d58da..be9d7e9 100644 (file)
--- a/zlib.c
+++ b/zlib.c
@@ -4,58 +4,61 @@
  */
 #include "cache.h"
 
-void git_inflate_init(z_streamp strm)
+static const char *zerr_to_string(int status)
 {
-       const char *err;
-
-       switch (inflateInit(strm)) {
-       case Z_OK:
-               return;
-
+       switch (status) {
        case Z_MEM_ERROR:
-               err = "out of memory";
-               break;
+               return "out of memory";
        case Z_VERSION_ERROR:
-               err = "wrong version";
-               break;
+               return "wrong version";
+       case Z_NEED_DICT:
+               return "needs dictionary";
+       case Z_DATA_ERROR:
+               return "data stream error";
+       case Z_STREAM_ERROR:
+               return "stream consistency error";
        default:
-               err = "error";
+               return "unknown error";
        }
-       die("inflateInit: %s (%s)", err, strm->msg ? strm->msg : "no message");
 }
 
-void git_inflate_end(z_streamp strm)
+void git_inflate_init(z_streamp strm)
 {
-       if (inflateEnd(strm) != Z_OK)
-               error("inflateEnd: %s", strm->msg ? strm->msg : "failed");
+       int status = inflateInit(strm);
+
+       if (status == Z_OK)
+               return;
+       die("inflateInit: %s (%s)", zerr_to_string(status),
+           strm->msg ? strm->msg : "no message");
 }
 
-int git_inflate(z_streamp strm, int flush)
+void git_inflate_end(z_streamp strm)
 {
-       int ret = inflate(strm, flush);
-       const char *err;
+       int status = inflateEnd(strm);
 
-       switch (ret) {
-       /* Out of memory is fatal. */
-       case Z_MEM_ERROR:
-               die("inflate: out of memory");
+       if (status == Z_OK)
+               return;
+       error("inflateEnd: %s (%s)", zerr_to_string(status),
+             strm->msg ? strm->msg : "no message");
+}
 
-       /* 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;
+int git_inflate(z_streamp strm, int flush)
+{
+       int status = inflate(strm, flush);
 
+       switch (status) {
        /* Z_BUF_ERROR: normal, needs more space in the output buffer */
        case Z_BUF_ERROR:
        case Z_OK:
        case Z_STREAM_END:
-               return ret;
+               return status;
+
+       case Z_MEM_ERROR:
+               die("inflate: out of memory");
+       default:
+               break;
        }
-       error("inflate: %s (%s)", err, strm->msg ? strm->msg : "no message");
-       return ret;
+       error("inflate: %s (%s)", zerr_to_string(status),
+             strm->msg ? strm->msg : "no message");
+       return status;
 }