threads / patch / 52222

patchconvert: use skip_iprefix() in validate_encoding()

Subject: [PATCH] convert: use skip_iprefix() in validate_encoding()

## tl;dr

2 messages between Nov 8, 2019 and Nov 8, 2019. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

René Scharfe· Nov 8, 2019, 20:27 UTC · lore

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(-)
Show changes to convert.c +8 −15
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
Jeff King· Nov 8, 2019, 22:19 UTC · re: René Scharfe · lore

Re: [PATCH] convert: use skip_iprefix() in validate_encoding()

On Fri, Nov 08, 2019 at 09:27:34PM +0100, René Scharfe wrote:
Show 16 quoted lines
> @@ -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

← back to recent threads