diff options
author | Junio C Hamano <junkio@cox.net> | 2006-12-28 19:03:02 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-12-28 19:03:02 -0800 |
commit | eff73751bb94b0241fd2204effb8680fe9973cbf (patch) | |
tree | 5fe6f0f55988d64a7b8b841c62b1c996a3fda5bf /builtin-mailinfo.c | |
parent | Allow non-fast-forward of remote tracking branches in default clone (diff) | |
parent | t3900: test conversion to non UTF-8 as well (diff) | |
download | tgif-eff73751bb94b0241fd2204effb8680fe9973cbf.tar.xz |
Merge branch 'jc/utf8'
* jc/utf8:
t3900: test conversion to non UTF-8 as well
Rename t3900 test vector file
UTF-8: introduce i18n.logoutputencoding.
Teach log family --encoding
i18n.logToUTF8: convert commit log message to UTF-8
Move encoding conversion routine out of mailinfo to utf8.c
Conflicts:
commit.c
Diffstat (limited to 'builtin-mailinfo.c')
-rw-r--r-- | builtin-mailinfo.c | 42 |
1 files changed, 11 insertions, 31 deletions
diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c index e6472293d4..a67f3eb90b 100644 --- a/builtin-mailinfo.c +++ b/builtin-mailinfo.c @@ -4,6 +4,7 @@ */ #include "cache.h" #include "builtin.h" +#include "utf8.h" static FILE *cmitmsg, *patchfile, *fin, *fout; @@ -510,40 +511,18 @@ static int decode_b_segment(char *in, char *ot, char *ep) static void convert_to_utf8(char *line, char *charset) { -#ifndef NO_ICONV - char *in, *out; - size_t insize, outsize, nrc; - char outbuf[4096]; /* cheat */ static char latin_one[] = "latin1"; char *input_charset = *charset ? charset : latin_one; - iconv_t conv = iconv_open(metainfo_charset, input_charset); - - if (conv == (iconv_t) -1) { - static int warned_latin1_once = 0; - if (input_charset != latin_one) { - fprintf(stderr, "cannot convert from %s to %s\n", - input_charset, metainfo_charset); - *charset = 0; - } - else if (!warned_latin1_once) { - warned_latin1_once = 1; - fprintf(stderr, "tried to convert from %s to %s, " - "but your iconv does not work with it.\n", - input_charset, metainfo_charset); - } + char *out = reencode_string(line, metainfo_charset, input_charset); + + if (!out) { + fprintf(stderr, "cannot convert from %s to %s\n", + input_charset, metainfo_charset); + *charset = 0; return; } - in = line; - insize = strlen(in); - out = outbuf; - outsize = sizeof(outbuf); - nrc = iconv(conv, &in, &insize, &out, &outsize); - iconv_close(conv); - if (nrc == (size_t) -1) - return; - *out = 0; - strcpy(line, outbuf); -#endif + strcpy(line, out); + free(out); } static int decode_header_bq(char *it) @@ -827,7 +806,8 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix) if (!strcmp(argv[1], "-k")) keep_subject = 1; else if (!strcmp(argv[1], "-u")) - metainfo_charset = git_commit_encoding; + metainfo_charset = (git_commit_encoding + ? git_commit_encoding : "utf-8"); else if (!strncmp(argv[1], "--encoding=", 11)) metainfo_charset = argv[1] + 11; else |