git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/6] zlib: refactor error message formatter

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 10, 2011, 20:15 UTC
Message-ID
<1307736948-16956-2-git-send-email-gitster@pobox.com>
In-Reply-To
<1307736948-16956-1-git-send-email-gitster@pobox.com>

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 |   73 +++++++++++++++++++++++++++++++++------------------------------
 1 files changed, 38 insertions(+), 35 deletions(-)
diff --git a/zlib.c b/zlib.c
index c4d58da..be9d7e9 100644
--- 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;
 }
-- 
1.7.6.rc1.118.ge175b4a
Previous: Junio C HamanoNext: Junio C Hamano
Message 2 of 16 in “zlib only processes 4GB at a time”
  1. 0/6 zlib only processes 4GB at a timeJunio C Hamano, Jun 10, 2011
  2. 1/6 zlib: refactor error message formatterJunio C Hamano, Jun 10, 2011
  3. 2/6 zlib: wrap remaining calls to direct inflate/inflateEndJunio C Hamano, Jun 10, 2011
  4. 3/6 zlib: wrap inflateInit2 used to accept only for gzip formatJunio C Hamano, Jun 10, 2011
  5. 4/6 zlib: wrap deflate side of the APIJunio C Hamano, Jun 10, 2011
  6. Thiago FarinaJun 10, 2011
  7. Junio C HamanoJun 10, 2011
  8. 5/6 zlib: wrap deflateBound() tooJunio C Hamano, Jun 10, 2011
  9. 6/6 zlib: zlib can only process 4GB at a timeJunio C Hamano, Jun 10, 2011
  10. Erik Faye-LundJun 12, 2011
  11. Junio C HamanoJun 12, 2011
  12. Matthieu MoyJun 12, 2011
  13. Erik Faye-LundJun 13, 2011
  14. Jonathan NiederJun 13, 2011
  15. Junio C HamanoJun 13, 2011
  16. 7/6 zlib: allow feeding more than 4GB in one goJunio C Hamano, Jun 10, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.