* [PATCH] convert: use skip_iprefix() in validate_encoding()
@ 2019-11-08 20:27 René Scharfe
2019-11-08 22:19 ` Jeff King
0 siblings, 1 reply; 2+ messages in thread
From: René Scharfe @ 2019-11-08 20:27 UTC (permalink / raw)
To: Git Mailing List; +Cc: Lars Schneider, Junio C Hamano
Use skip_iprefix() to parse "UTF" case-insensitively instead of checking
with istarts_with(), building an upper-case version and then using
skip_prefix() on it. This gets rid of duplicate code and of a small
allocation.
Signed-off-by: René Scharfe <l.s.r@web.de>
---
convert.c | 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
diff --git a/convert.c b/convert.c
index 25ac525d5f..99f684bf3e 100644
--- a/convert.c
+++ b/convert.c
@@ -270,8 +270,12 @@ static int will_convert_lf_to_crlf(struct text_stat *stats,
static int validate_encoding(const char *path, const char *enc,
const char *data, size_t len, int die_on_error)
{
+ const char *stripped;
+
/* We only check for UTF here as UTF?? can be an alias for UTF-?? */
- if (istarts_with(enc, "UTF")) {
+ if (skip_iprefix(enc, "UTF", &stripped)) {
+ skip_prefix(stripped, "-", &stripped);
+
/*
* Check for detectable errors in UTF encodings
*/
@@ -285,15 +289,10 @@ static int validate_encoding(const char *path, const char *enc,
*/
const char *advise_msg = _(
"The file '%s' contains a byte order "
- "mark (BOM). Please use UTF-%s as "
+ "mark (BOM). Please use UTF-%.*s as "
"working-tree-encoding.");
- const char *stripped = NULL;
- char *upper = xstrdup_toupper(enc);
- upper[strlen(upper)-2] = '\0';
- if (skip_prefix(upper, "UTF", &stripped))
- skip_prefix(stripped, "-", &stripped);
- advise(advise_msg, path, stripped);
- free(upper);
+ int stripped_len = strlen(stripped) - strlen("BE");
+ advise(advise_msg, path, stripped_len, stripped);
if (die_on_error)
die(error_msg, path, enc);
else {
@@ -308,12 +307,7 @@ static int validate_encoding(const char *path, const char *enc,
"mark (BOM). Please use UTF-%sBE or UTF-%sLE "
"(depending on the byte order) as "
"working-tree-encoding.");
- const char *stripped = NULL;
- char *upper = xstrdup_toupper(enc);
- if (skip_prefix(upper, "UTF", &stripped))
- skip_prefix(stripped, "-", &stripped);
advise(advise_msg, path, stripped, stripped);
- free(upper);
if (die_on_error)
die(error_msg, path, enc);
else {
--
2.24.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] convert: use skip_iprefix() in validate_encoding()
2019-11-08 20:27 [PATCH] convert: use skip_iprefix() in validate_encoding() René Scharfe
@ 2019-11-08 22:19 ` Jeff King
0 siblings, 0 replies; 2+ messages in thread
From: Jeff King @ 2019-11-08 22:19 UTC (permalink / raw)
To: René Scharfe; +Cc: Git Mailing List, Lars Schneider, Junio C Hamano
On Fri, Nov 08, 2019 at 09:27:34PM +0100, René Scharfe wrote:
> @@ -285,15 +289,10 @@ static int validate_encoding(const char *path, const char *enc,
> */
> const char *advise_msg = _(
> "The file '%s' contains a byte order "
> - "mark (BOM). Please use UTF-%s as "
> + "mark (BOM). Please use UTF-%.*s as "
> "working-tree-encoding.");
> - const char *stripped = NULL;
> - char *upper = xstrdup_toupper(enc);
> - upper[strlen(upper)-2] = '\0';
> - if (skip_prefix(upper, "UTF", &stripped))
> - skip_prefix(stripped, "-", &stripped);
> - advise(advise_msg, path, stripped);
> - free(upper);
> + int stripped_len = strlen(stripped) - strlen("BE");
> + advise(advise_msg, path, stripped_len, stripped);
I think we could drop xstrdup_toupper() after this.
Of course it _could_ come in handy in another spot, but in most cases
you can use xstrdup_tolower() interchangeably (e.g., that would have
worked here). And even the tolower() variant is seldom used.
-Peff
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-11-08 22:19 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-08 20:27 [PATCH] convert: use skip_iprefix() in validate_encoding() René Scharfe
2019-11-08 22:19 ` Jeff King
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).