summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2013-03-21 14:02:58 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2013-03-21 14:02:58 -0700
commit31b12a1999968b54ff3f251d4e939e7ecf662711 (patch)
treeb407335a16a667507148f973c4093bbdb1bc5e87
parentMerge branch 'mg/gpg-interface-using-status' (diff)
parentutf8: accept alternate spellings of UTF-8 (diff)
downloadtgif-31b12a1999968b54ff3f251d4e939e7ecf662711.tar.xz
Merge branch 'jk/utf-8-can-be-spelled-differently'
Some platforms and users spell UTF-8 differently; retry with the most official "UTF-8" when the system does not understand the user-supplied encoding name that are the common alternative spellings of UTF-8. * jk/utf-8-can-be-spelled-differently: utf8: accept alternate spellings of UTF-8
-rw-r--r--utf8.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/utf8.c b/utf8.c
index 1087870c51..8f6e84b7b3 100644
--- a/utf8.c
+++ b/utf8.c
@@ -507,9 +507,25 @@ char *reencode_string(const char *in, const char *out_encoding, const char *in_e
if (!in_encoding)
return NULL;
+
conv = iconv_open(out_encoding, in_encoding);
- if (conv == (iconv_t) -1)
- return NULL;
+ if (conv == (iconv_t) -1) {
+ /*
+ * Some platforms do not have the variously spelled variants of
+ * UTF-8, so let's fall back to trying the most official
+ * spelling. We do so only as a fallback in case the platform
+ * does understand the user's spelling, but not our official
+ * one.
+ */
+ if (is_encoding_utf8(in_encoding))
+ in_encoding = "UTF-8";
+ if (is_encoding_utf8(out_encoding))
+ out_encoding = "UTF-8";
+ conv = iconv_open(out_encoding, in_encoding);
+ if (conv == (iconv_t) -1)
+ return NULL;
+ }
+
out = reencode_string_iconv(in, strlen(in), conv);
iconv_close(conv);
return out;