void precompose_argv(int argc, const char **argv) { int i = 0; const char *oldarg; char *newarg; iconv_t ic_precompose; if (precomposed_unicode != 1) return; ic_precompose = iconv_open(repo_encoding, path_encoding); if (ic_precompose == (iconv_t) -1) return; while (i < argc) { size_t namelen; oldarg = argv[i]; if (has_non_ascii(oldarg, (size_t)-1, &namelen)) { newarg = reencode_string_iconv(oldarg, namelen, ic_precompose); if (newarg) argv[i] = newarg; } i++; } iconv_close(ic_precompose); }
char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding) { iconv_t conv; char *out; if (!in_encoding) return NULL; conv = iconv_open(out_encoding, in_encoding); 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; }
char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding) { iconv_t conv; char *out; if (!in_encoding) return NULL; 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; }