coreutils
[Top][All Lists]
Advanced

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

[PATCH] maint: prefer STREQ_LEN and STRPREFIX over strncmp in all cases


From: Bernhard Voelker
Subject: [PATCH] maint: prefer STREQ_LEN and STRPREFIX over strncmp in all cases
Date: Sun, 15 Feb 2015 23:26:18 +0100

* cfg.mk (sc_prohibit_strncmp): Improve the search pattern: use
_sc_search_regexp to find all invocations of strncmp except when
used on a macro definition line; just match the function name with
an opening parenthesis.  Before, the expression missed places where
the comparison against 0 was in a subsequent line.
* src/system.h (STRNCMP_LIT): Shorten 'literal' to 'lit' to move
the whole definition of the macro into one line - thus making
sc_prohibit_strncmp pass.
(STRPREFIX): Add space before parenthesis.
* src/du.c (main): Prefer STRPREFIX over strncmp.
* src/pinky.c (scan_entries): Prefer STREQ_LEN over strncmp.
* src/tac.c (tac_seekable): Likewise.
* src/who.c (scan_entries): Likewise.
---
 cfg.mk       | 8 +++-----
 src/du.c     | 3 +--
 src/pinky.c  | 3 +--
 src/system.h | 5 ++---
 src/tac.c    | 4 ++--
 src/who.c    | 4 ++--
 6 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/cfg.mk b/cfg.mk
index 7dc1a20..ab0b8a4 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -581,11 +581,9 @@ sc_space_before_open_paren:
 # Similar to the gnulib maint.mk rule for sc_prohibit_strcmp
 # Use STREQ_LEN or STRPREFIX rather than comparing strncmp == 0, or != 0.
 sc_prohibit_strncmp:
-       @grep -nE '! *str''ncmp *\(|\<str''ncmp *\(.+\) *[!=]='         \
-           $$($(VC_LIST_EXCEPT))                                       \
-         | grep -vE ':# *define STR(N?EQ_LEN|PREFIX)\(' &&             \
-         { echo '$(ME): use STREQ_LEN or STRPREFIX instead of str''ncmp' \
-               1>&2; exit 1; } || :
+       @prohibit='^[^#].*str''ncmp *\('                                \
+       halt='use STREQ_LEN or STRPREFIX instead of str''ncmp'          \
+         $(_sc_search_regexp)
 
 # Enforce recommended preprocessor indentation style.
 sc_preprocessor_indentation:
diff --git a/src/du.c b/src/du.c
index 65fc074..5c664f9 100644
--- a/src/du.c
+++ b/src/du.c
@@ -968,8 +968,7 @@ main (int argc, char **argv)
             {
               /* Ignore "posix-" prefix, for compatibility with ls.  */
               static char const posix_prefix[] = "posix-";
-              while (strncmp (time_style, posix_prefix, sizeof posix_prefix - 
1)
-                     == 0)
+              while (STRPREFIX (time_style, posix_prefix))
                 time_style += sizeof posix_prefix - 1;
             }
         }
diff --git a/src/pinky.c b/src/pinky.c
index f1bf340..71650bf 100644
--- a/src/pinky.c
+++ b/src/pinky.c
@@ -445,8 +445,7 @@ scan_entries (size_t n, const STRUCT_UTMP *utmp_buf,
               int i;
 
               for (i = 0; i < argc_names; i++)
-                if (strncmp (UT_USER (utmp_buf), argv_names[i], UT_USER_SIZE)
-                    == 0)
+                if (STREQ_LEN (UT_USER (utmp_buf), argv_names[i], 
UT_USER_SIZE))
                   {
                     print_entry (utmp_buf);
                     break;
diff --git a/src/system.h b/src/system.h
index b6c971d..46edd07 100644
--- a/src/system.h
+++ b/src/system.h
@@ -193,12 +193,11 @@ select_plural (uintmax_t n)
 
 #define STREQ(a, b) (strcmp (a, b) == 0)
 #define STREQ_LEN(a, b, n) (strncmp (a, b, n) == 0)
-#define STRPREFIX(a, b) (strncmp(a, b, strlen (b)) == 0)
+#define STRPREFIX(a, b) (strncmp (a, b, strlen (b)) == 0)
 
 /* Just like strncmp, but the second argument must be a literal string
    and you don't specify the length;  that comes from the literal.  */
-#define STRNCMP_LIT(s, literal) \
-  strncmp (s, "" literal "", sizeof (literal) - 1)
+#define STRNCMP_LIT(s, lit) strncmp (s, "" lit "", sizeof (lit) - 1)
 
 #if !HAVE_DECL_GETLOGIN
 char *getlogin ();
diff --git a/src/tac.c b/src/tac.c
index 9fce472..b69953f 100644
--- a/src/tac.c
+++ b/src/tac.c
@@ -296,8 +296,8 @@ tac_seekable (int input_fd, const char *file, off_t 
file_pos)
         {
           /* 'match_length' is constant for non-regexp boundaries. */
           while (*--match_start != first_char
-                 || (match_length1 && strncmp (match_start + 1, separator1,
-                                               match_length1)))
+                 || (match_length1 && !STREQ_LEN (match_start + 1, separator1,
+                                                  match_length1)))
             /* Do nothing. */ ;
         }
 
diff --git a/src/who.c b/src/who.c
index cc42d5f..0a09411 100644
--- a/src/who.c
+++ b/src/who.c
@@ -582,8 +582,8 @@ scan_entries (size_t n, const STRUCT_UTMP *utmp_buf)
   while (n--)
     {
       if (!my_line_only
-          || strncmp (ttyname_b, utmp_buf->ut_line,
-                      sizeof (utmp_buf->ut_line)) == 0)
+          || STREQ_LEN (ttyname_b, utmp_buf->ut_line,
+                        sizeof (utmp_buf->ut_line)))
         {
           if (need_users && IS_USER_PROCESS (utmp_buf))
             print_user (utmp_buf, boottime);
-- 
2.1.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]