[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
- [PATCH] maint: prefer STREQ_LEN and STRPREFIX over strncmp in all cases,
Bernhard Voelker <=