aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-12-07 14:10:56 -0800
committerJunio C Hamano <gitster@pobox.com>2012-12-07 14:10:56 -0800
commitfff26a68053022a2cbc39142c7c6f6d016837058 (patch)
tree1ad5a3cd1a135213b3694f11fdcb52bcddec51b9
parent6a402843c2bc0a72fb70c8795aee523d7f1582d3 (diff)
parent0e18bcd5e937b9e5857892e7f5c80c3c5b1da5d4 (diff)
downloadgit-fff26a68053022a2cbc39142c7c6f6d016837058.tar.gz
git-fff26a68053022a2cbc39142c7c6f6d016837058.tar.xz
Merge branch 'jc/same-encoding' into maint
Various codepaths checked if two encoding names are the same using ad-hoc code and some of them ended up asking iconv() to convert between "utf8" and "UTF-8". The former is not a valid way to spell the encoding name, but often people use it by mistake, and we equated them in some but not all codepaths. Introduce a new helper function to make these codepaths consistent. * jc/same-encoding: reencode_string(): introduce and use same_encoding()
-rw-r--r--builtin/mailinfo.c3
-rw-r--r--notes.c2
-rw-r--r--pretty.c2
-rw-r--r--sequencer.c2
-rw-r--r--utf8.c7
-rw-r--r--utf8.h1
6 files changed, 13 insertions, 4 deletions
diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c
index da231400b..24a772d8e 100644
--- a/builtin/mailinfo.c
+++ b/builtin/mailinfo.c
@@ -483,7 +483,8 @@ static void convert_to_utf8(struct strbuf *line, const char *charset)
if (!charset || !*charset)
return;
- if (!strcasecmp(metainfo_charset, charset))
+
+ if (same_encoding(metainfo_charset, charset))
return;
out = reencode_string(line->buf, metainfo_charset, charset);
if (!out)
diff --git a/notes.c b/notes.c
index bc454e1ea..ee8f01f1d 100644
--- a/notes.c
+++ b/notes.c
@@ -1231,7 +1231,7 @@ static void format_note(struct notes_tree *t, const unsigned char *object_sha1,
}
if (output_encoding && *output_encoding &&
- strcmp(utf8, output_encoding)) {
+ !is_encoding_utf8(output_encoding)) {
char *reencoded = reencode_string(msg, output_encoding, utf8);
if (reencoded) {
free(msg);
diff --git a/pretty.c b/pretty.c
index 413e7587b..dba682828 100644
--- a/pretty.c
+++ b/pretty.c
@@ -571,7 +571,7 @@ char *logmsg_reencode(const struct commit *commit,
return NULL;
encoding = get_header(commit, "encoding");
use_encoding = encoding ? encoding : utf8;
- if (!strcmp(use_encoding, output_encoding))
+ if (same_encoding(use_encoding, output_encoding))
if (encoding) /* we'll strip encoding header later */
out = xstrdup(commit->buffer);
else
diff --git a/sequencer.c b/sequencer.c
index e3723d209..73c396bd8 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -60,7 +60,7 @@ static int get_message(struct commit *commit, struct commit_message *out)
out->reencoded_message = NULL;
out->message = commit->buffer;
- if (strcmp(encoding, git_commit_encoding))
+ if (same_encoding(encoding, git_commit_encoding))
out->reencoded_message = reencode_string(commit->buffer,
git_commit_encoding, encoding);
if (out->reencoded_message)
diff --git a/utf8.c b/utf8.c
index 28791a7c3..5c61bbe11 100644
--- a/utf8.c
+++ b/utf8.c
@@ -423,6 +423,13 @@ int is_encoding_utf8(const char *name)
return 0;
}
+int same_encoding(const char *src, const char *dst)
+{
+ if (is_encoding_utf8(src) && is_encoding_utf8(dst))
+ return 1;
+ return !strcasecmp(src, dst);
+}
+
/*
* Given a buffer and its encoding, return it re-encoded
* with iconv. If the conversion fails, returns NULL.
diff --git a/utf8.h b/utf8.h
index 3c0ae7624..93ef60042 100644
--- a/utf8.h
+++ b/utf8.h
@@ -7,6 +7,7 @@ int utf8_width(const char **start, size_t *remainder_p);
int utf8_strwidth(const char *string);
int is_utf8(const char *text);
int is_encoding_utf8(const char *name);
+int same_encoding(const char *, const char *);
int strbuf_add_wrapped_text(struct strbuf *buf,
const char *text, int indent, int indent2, int width);