summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Voelker <mail@bernhard-voelker.de>2015-02-17 08:46:56 +0100
committerBernhard Voelker <mail@bernhard-voelker.de>2015-02-17 08:50:34 +0100
commit9f5dce80702d494535ab332273d20da1f9ca4365 (patch)
tree6b86c2256ba1d4675513f62bb2454d6eec80c998
parent321bd11352d1f378128d65746852e073f86319d3 (diff)
downloadcoreutils-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.mk8
-rw-r--r--src/du.c6
-rw-r--r--src/pinky.c3
-rw-r--r--src/system.h5
-rw-r--r--src/tac.c4
-rw-r--r--src/who.c4
6 files changed, 13 insertions, 17 deletions
diff --git a/cfg.mk b/cfg.mk
index 7dc1a20c8..ab0b8a4b6 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 65fc0742f..86827f808 100644
--- a/src/du.c
+++ b/src/du.c
@@ -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 ();
diff --git a/src/tac.c b/src/tac.c
index 9fce47208..b69953f35 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 cc42d5f5b..0a09411f4 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);