Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/indent indent: split bsearch comparison function



details:   https://anonhg.NetBSD.org/src/rev/e9ea75a81db3
branches:  trunk
changeset: 953433:e9ea75a81db3
user:      rillig <rillig%NetBSD.org@localhost>
date:      Mon Mar 08 21:13:33 2021 +0000

description:
indent: split bsearch comparison function

It may have been a clever trick to use the same memory layout for struct
templ and a string pointer, but it's not worth the extra comment and
difficulty in understanding the code.

No functional change.

diffstat:

 usr.bin/indent/lexi.c |  27 +++++++++++++++------------
 1 files changed, 15 insertions(+), 12 deletions(-)

diffs (71 lines):

diff -r 65ef0288ae35 -r e9ea75a81db3 usr.bin/indent/lexi.c
--- a/usr.bin/indent/lexi.c     Mon Mar 08 20:55:34 2021 +0000
+++ b/usr.bin/indent/lexi.c     Mon Mar 08 21:13:33 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: lexi.c,v 1.26 2021/03/08 20:20:11 rillig Exp $ */
+/*     $NetBSD: lexi.c,v 1.27 2021/03/08 21:13:33 rillig Exp $ */
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -46,7 +46,7 @@
 #include <sys/cdefs.h>
 #ifndef lint
 #if defined(__NetBSD__)
-__RCSID("$NetBSD: lexi.c,v 1.26 2021/03/08 20:20:11 rillig Exp $");
+__RCSID("$NetBSD: lexi.c,v 1.27 2021/03/08 21:13:33 rillig Exp $");
 #elif defined(__FreeBSD__)
 __FBSDID("$FreeBSD: head/usr.bin/indent/lexi.c 337862 2018-08-15 18:19:45Z pstef $");
 #endif
@@ -75,9 +75,9 @@
 
 /*
  * This table has to be sorted alphabetically, because it'll be used in binary
- * search. For the same reason, string must be the first thing in struct templ.
+ * search.
  */
-struct templ specials[] =
+const struct templ specials[] =
 {
     {"_Bool", rw_type},
     {"_Complex", rw_type},
@@ -187,9 +187,15 @@
 }
 
 static int
-strcmp_type(const void *e1, const void *e2)
+compare_templ_array(const void *key, const void *elem)
 {
-    return strcmp(e1, *(const char *const *)e2);
+    return strcmp(key, ((const struct templ *)elem)->rwd);
+}
+
+static int
+compare_string_array(const void *key, const void *elem)
+{
+    return strcmp(key, *((const char *const *)elem));
 }
 
 #ifdef debug
@@ -341,11 +347,8 @@
         */
        state->last_u_d = (state->last_token == structure);
 
-       p = bsearch(s_token,
-           specials,
-           sizeof(specials) / sizeof(specials[0]),
-           sizeof(specials[0]),
-           strcmp_type);
+       p = bsearch(s_token, specials, sizeof specials / sizeof specials[0],
+           sizeof specials[0], compare_templ_array);
        if (p == NULL) {        /* not a special keyword... */
            char *u;
 
@@ -353,7 +356,7 @@
            if ((opt.auto_typedefs && ((u = strrchr(s_token, '_')) != NULL) &&
                strcmp(u, "_t") == 0) || (typename_top >= 0 &&
                  bsearch(s_token, typenames, typename_top + 1,
-                   sizeof(typenames[0]), strcmp_type))) {
+                   sizeof typenames[0], compare_string_array))) {
                state->keyword = rw_type;
                state->last_u_d = true;
                goto found_typename;



Home | Main Index | Thread Index | Old Index