reencode_string: use size_t for string lengths

The iconv interface takes a size_t, which is the appropriate type for an in-memory buffer. But our reencode_string_* functions use integers, meaning we may get confusing results when the sizes exceed INT_MAX. Let's use size_t consistently. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Jul 24, 2018 at 06:50 UTC c7d017d7e1cca37ca20f73c11fa9f1b319a2c3a5
5 files changed +13 -13
convert.c
+3 -3
@@ -389,7 +389,7 @@ static int encode_to_git(const char *path, const char *src, size_t src_len,
389 struct strbuf *buf, const char *enc, int conv_flags)
390 {
391 char *dst;
392 - int dst_len;
392 + size_t dst_len;
393 int die_on_error = conv_flags & CONV_WRITE_OBJECT;
394
395 /*
@@ -452,7 +452,7 @@ static int encode_to_git(const char *path, const char *src, size_t src_len,
452 */
453 if (die_on_error && check_roundtrip(enc)) {
454 char *re_src;
455 - int re_src_len;
455 + size_t re_src_len;
456
457 re_src = reencode_string_len(dst, dst_len,
458 enc, default_encoding,
@@ -480,7 +480,7 @@ static int encode_to_worktree(const char *path, const char *src, size_t src_len,
480 struct strbuf *buf, const char *enc)
481 {
482 char *dst;
483 - int dst_len;
483 + size_t dst_len;
484
485 /*
486 * No encoding is specified or there is nothing to encode.
pretty.c
+1 -1
@@ -1538,7 +1538,7 @@ void format_commit_message(const struct commit *commit,
1538 }
1539
1540 if (output_enc) {
1541 - int outsz;
1541 + size_t outsz;
1542 char *out = reencode_string_len(sb->buf, sb->len,
1543 output_enc, utf8, &outsz);
1544 if (out)
strbuf.c
+1 -1
@@ -134,7 +134,7 @@ void strbuf_ltrim(struct strbuf *sb)
134 int strbuf_reencode(struct strbuf *sb, const char *from, const char *to)
135 {
136 char *out;
137 - int len;
137 + size_t len;
138
139 if (same_encoding(from, to))
140 return 0;
utf8.c
+3 -3
@@ -470,7 +470,7 @@ int utf8_fprintf(FILE *stream, const char *format, ...)
470 #else
471 typedef char * iconv_ibp;
472 #endif
473 -char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, int *outsz_p)
473 +char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, size_t *outsz_p)
474 {
475 size_t outsz, outalloc;
476 char *out, *outpos;
@@ -534,9 +534,9 @@ static const char *fallback_encoding(const char *name)
534 return name;
535 }
536
537 -char *reencode_string_len(const char *in, int insz,
537 +char *reencode_string_len(const char *in, size_t insz,
538 const char *out_encoding, const char *in_encoding,
539 - int *outsz)
539 + size_t *outsz)
540 {
541 iconv_t conv;
542 char *out;
utf8.h
+5 -5
@@ -25,14 +25,14 @@ void strbuf_utf8_replace(struct strbuf *sb, int pos, int width,
25
26 #ifndef NO_ICONV
27 char *reencode_string_iconv(const char *in, size_t insz,
28 - iconv_t conv, int *outsz);
29 -char *reencode_string_len(const char *in, int insz,
28 + iconv_t conv, size_t *outsz);
29 +char *reencode_string_len(const char *in, size_t insz,
30 const char *out_encoding,
31 const char *in_encoding,
32 - int *outsz);
32 + size_t *outsz);
33 #else
34 -static inline char *reencode_string_len(const char *a, int b,
35 - const char *c, const char *d, int *e)
34 +static inline char *reencode_string_len(const char *a, size_t b,
35 + const char *c, const char *d, size_t *e)
36 { if (e) *e = 0; return NULL; }
37 #endif
38