Torsten, I can't compile compat/precomposed_utf8.c on linux even though I make some changes there. Can you check if I break something? I'm pretty sure I don't, but just in case. On Tue, Apr 16, 2013 at 6:24 PM, Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> wrote: > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > compat/precompose_utf8.c | 2 +- > utf8.c | 10 +++++++--- > utf8.h | 19 ++++++++++++++++--- > 3 files changed, 24 insertions(+), 7 deletions(-) > > diff --git a/compat/precompose_utf8.c b/compat/precompose_utf8.c > index 8cf5955..d9203d0 100644 > --- a/compat/precompose_utf8.c > +++ b/compat/precompose_utf8.c > @@ -78,7 +78,7 @@ void precompose_argv(int argc, const char **argv) > size_t namelen; > oldarg = argv[i]; > if (has_non_ascii(oldarg, (size_t)-1, &namelen)) { > - newarg = reencode_string_iconv(oldarg, namelen, ic_precompose); > + newarg = reencode_string_iconv(oldarg, namelen, ic_precompose, NULL); > if (newarg) > argv[i] = newarg; > } > diff --git a/utf8.c b/utf8.c > index 9df087f..ac630bc 100644 > --- a/utf8.c > +++ b/utf8.c > @@ -468,7 +468,7 @@ int utf8_fprintf(FILE *stream, const char *format, ...) > #else > typedef char * iconv_ibp; > #endif > -char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv) > +char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, int *outsz_p) > { > size_t outsz, outalloc; > char *out, *outpos; > @@ -502,13 +502,17 @@ char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv) > } > else { > *outpos = '\0'; > + if (outsz_p) > + *outsz_p = outpos - out; > break; > } > } > return out; > } > > -char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding) > +char *reencode_string_len(const char *in, int insz, > + const char *out_encoding, const char *in_encoding, > + int *outsz) > { > iconv_t conv; > char *out; > @@ -534,7 +538,7 @@ char *reencode_string(const char *in, const char *out_encoding, const char *in_e > return NULL; > } > > - out = reencode_string_iconv(in, strlen(in), conv); > + out = reencode_string_iconv(in, insz, conv, outsz); > iconv_close(conv); > return out; > } > diff --git a/utf8.h b/utf8.h > index d3da96f..a43ef9a 100644 > --- a/utf8.h > +++ b/utf8.h > @@ -17,12 +17,25 @@ void strbuf_add_wrapped_bytes(struct strbuf *buf, const char *data, int len, > int indent, int indent2, int width); > > #ifndef NO_ICONV > -char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv); > -char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding); > +char *reencode_string_iconv(const char *in, size_t insz, > + iconv_t conv, int *outsz); > +char *reencode_string_len(const char *in, int insz, > + const char *out_encoding, > + const char *in_encoding, > + int *outsz); > #else > -#define reencode_string(a,b,c) NULL > +#define reencode_string_len(a,b,c,d,e) NULL > #endif > > +static inline char *reencode_string(const char *in, > + const char *out_encoding, > + const char *in_encoding) > +{ > + return reencode_string_len(in, strlen(in), > + out_encoding, in_encoding, > + NULL); > +} > + > int mbs_chrlen(const char **text, size_t *remainder_p, const char *encoding); > > #endif > -- > 1.8.2.82.gc24b958 > -- Duy -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html