utf8: NO_ICONV: silence uninitialized variable warning
authorEric Sunshine <sunshine@sunshineco.com>
Fri, 5 Jun 2015 06:42:16 +0000 (02:42 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 5 Jun 2015 22:36:35 +0000 (15:36 -0700)
The last argument of reencode_string_len() is an 'int *' which is
assigned the length of the converted string. When NO_ICONV is defined,
however, reencode_string_len() is stubbed out by the macro:

#define reencode_string_len(a,b,c,d,e) NULL

which never assigns a value to the final argument. When called like
this:

int n;
char *s = reencode_string_len(..., &n);
if (s)
do_something(s, n);

some compilers complain that 'n' is used uninitialized within the
conditional.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
utf8.h
diff --git a/utf8.h b/utf8.h
index e4d9183c5fec81f8dbc75d1f2aea136f9b397a72..07e7054343765b624203e79571896cd5411e28fd 100644 (file)
--- a/utf8.h
+++ b/utf8.h
@@ -28,7 +28,9 @@ char *reencode_string_len(const char *in, int insz,
                          const char *in_encoding,
                          int *outsz);
 #else
-#define reencode_string_len(a,b,c,d,e) NULL
+static inline char *reencode_string_len(const char *a, int b,
+                                       const char *c, const char *d, int *e)
+{ if (e) *e = 0; return NULL; }
 #endif
 
 static inline char *reencode_string(const char *in,