threads / patch / 52022

patchutf8: use ARRAY_SIZE() in git_wcwidth()

Subject: [PATCH] utf8: use ARRAY_SIZE() in git_wcwidth()

## tl;dr

3 messages between Oct 11, 2019 and Oct 12, 2019. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Beat Bolli· Oct 11, 2019, 18:24 UTC · lore

This macro has been available globally since b4f2a6ac92 ("Use #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))", 2006-03-09), so let's use it.

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
---
It's idle to speculate about why the macro wasn't used in the original
9e83266525 ("commit-tree: encourage UTF-8 commit messages.", 2006-12-22)
or why it hasn't been cleaned up since then. Possible reasons may be the
line wrap within the division or the fact that one sizeof() takes the
variable while the other one takes the type. Either of these would make
a normal search fail.
 utf8.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
Show changes to utf8.c +2 −4
diff --git a/utf8.c b/utf8.c
index 3b42fadffd..164e20c817 100644
--- a/utf8.c
+++ b/utf8.c
@@ -95,13 +95,11 @@ static int git_wcwidth(ucs_char_t ch)
 		return -1;
 
 	/* binary search in table of non-spacing characters */
-	if (bisearch(ch, zero_width, sizeof(zero_width)
-				/ sizeof(struct interval) - 1))
+	if (bisearch(ch, zero_width, ARRAY_SIZE(zero_width) - 1)
 		return 0;
 
 	/* binary search in table of double width characters */
-	if (bisearch(ch, double_width, sizeof(double_width)
-				/ sizeof(struct interval) - 1))
+	if (bisearch(ch, double_width, ARRAY_SIZE(double_width) - 1)
 		return 2;
 
 	return 1;
-- 
2.21.0.1020.gf2820cf01a
Beat Bolli· Oct 11, 2019, 18:41 UTC · re: Beat Bolli · lore

[PATCH v2] utf8: use ARRAY_SIZE() in git_wcwidth()

This macro has been available globally since b4f2a6ac92 ("Use #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))", 2006-03-09), so let's use it.

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
---
Brown paperbag fix. Sorry!

It's idle to speculate about why the macro wasn't used in the original 9e83266525 ("commit-tree: encourage UTF-8 commit messages.", 2006-12-22) or why it hasn't been cleaned up since then. Possible reasons may be the line wrap within the division or the fact that one sizeof() takes the variable while the other one takes the type. Either of these would make a normal search fail.

 utf8.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
Show changes to utf8.c +2 −4
diff --git a/utf8.c b/utf8.c
index 3b42fadffd..5c8f151f75 100644
--- a/utf8.c
+++ b/utf8.c
@@ -95,13 +95,11 @@ static int git_wcwidth(ucs_char_t ch)
 		return -1;
 
 	/* binary search in table of non-spacing characters */
-	if (bisearch(ch, zero_width, sizeof(zero_width)
-				/ sizeof(struct interval) - 1))
+	if (bisearch(ch, zero_width, ARRAY_SIZE(zero_width) - 1))
 		return 0;
 
 	/* binary search in table of double width characters */
-	if (bisearch(ch, double_width, sizeof(double_width)
-				/ sizeof(struct interval) - 1))
+	if (bisearch(ch, double_width, ARRAY_SIZE(double_width) - 1))
 		return 2;
 
 	return 1;
-- 
2.21.0.1020.gf2820cf01a
Junio C Hamano· Oct 12, 2019, 01:57 UTC · re: Beat Bolli · lore

Re: [PATCH v2] utf8: use ARRAY_SIZE() in git_wcwidth()

Beat Bolli <dev+git@drbeat.li> writes:
Show 11 quoted lines
> diff --git a/utf8.c b/utf8.c
> index 3b42fadffd..5c8f151f75 100644
> --- a/utf8.c
> +++ b/utf8.c
> @@ -95,13 +95,11 @@ static int git_wcwidth(ucs_char_t ch)
>  		return -1;
>  
>  	/* binary search in table of non-spacing characters */
> -	if (bisearch(ch, zero_width, sizeof(zero_width)
> -				/ sizeof(struct interval) - 1))
> +	if (bisearch(ch, zero_width, ARRAY_SIZE(zero_width) - 1))

I wondered if we want a wrapper similar to QSORT() macro so that we do not have to repeat zero_width (and double_width below) like this, but bisearch() itself is local to this file and there are only these two callers, so it probably is not worth it.

The original is waiting for a bug when zero_width changes its type, by not dividing with sizeof(*zero_width). The use of ARRAY_SIZE() is quite appropriate here.

Thanks.
Show 9 quoted lines
>  		return 0;
>  
>  	/* binary search in table of double width characters */
> -	if (bisearch(ch, double_width, sizeof(double_width)
> -				/ sizeof(struct interval) - 1))
> +	if (bisearch(ch, double_width, ARRAY_SIZE(double_width) - 1))
>  		return 2;
>  
>  	return 1;

← back to recent threads