Browse Source

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()
maint
Junio C Hamano 12 years ago
parent
commit
fff26a6805
  1. 3
      builtin/mailinfo.c
  2. 2
      notes.c
  3. 2
      pretty.c
  4. 2
      sequencer.c
  5. 7
      utf8.c
  6. 1
      utf8.h

3
builtin/mailinfo.c

@ -483,7 +483,8 @@ static void convert_to_utf8(struct strbuf *line, const char *charset) @@ -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)

2
notes.c

@ -1231,7 +1231,7 @@ static void format_note(struct notes_tree *t, const unsigned char *object_sha1, @@ -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);

2
pretty.c

@ -571,7 +571,7 @@ char *logmsg_reencode(const struct commit *commit, @@ -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

2
sequencer.c

@ -60,7 +60,7 @@ static int get_message(struct commit *commit, struct commit_message *out) @@ -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)

7
utf8.c

@ -423,6 +423,13 @@ int is_encoding_utf8(const char *name) @@ -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.

1
utf8.h

@ -7,6 +7,7 @@ int utf8_width(const char **start, size_t *remainder_p); @@ -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);

Loading…
Cancel
Save