diff options
author | Bernhard Voelker <mail@bernhard-voelker.de> | 2015-02-17 08:46:56 +0100 |
---|---|---|
committer | Bernhard Voelker <mail@bernhard-voelker.de> | 2015-02-17 08:50:34 +0100 |
commit | 9f5dce80702d494535ab332273d20da1f9ca4365 (patch) | |
tree | 6b86c2256ba1d4675513f62bb2454d6eec80c998 | |
parent | 321bd11352d1f378128d65746852e073f86319d3 (diff) | |
download | coreutils-9f5dce80702d494535ab332273d20da1f9ca4365.tar.xz |
maint: prefer STREQ_LEN and STRPREFIX over strncmp in all cases
* 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 STREQ_LEN over strncmp.
* src/pinky.c (scan_entries): Likewise.
* src/tac.c (tac_seekable): Likewise.
* src/who.c (scan_entries): Likewise.
-rw-r--r-- | cfg.mk | 8 | ||||
-rw-r--r-- | src/du.c | 6 | ||||
-rw-r--r-- | src/pinky.c | 3 | ||||
-rw-r--r-- | src/system.h | 5 | ||||
-rw-r--r-- | src/tac.c | 4 | ||||
-rw-r--r-- | src/who.c | 4 |
6 files changed, 13 insertions, 17 deletions
@@ -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: @@ -968,9 +968,9 @@ 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) - time_style += sizeof posix_prefix - 1; + static const size_t prefix_len = sizeof posix_prefix - 1; + while (STREQ_LEN (time_style, posix_prefix, prefix_len)) + time_style += prefix_len; } } diff --git a/src/pinky.c b/src/pinky.c index f1bf3407c..71650bfae 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 b6c971d30..46edd07d5 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 (); @@ -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. */ ; } @@ -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); |