diff options
author | Elliott Hughes <enh@google.com> | 2018-11-28 12:27:14 -0800 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2018-11-28 19:03:25 -0600 |
commit | acfbb13661f425631ee7e7f01daa1eb2f3169945 (patch) | |
tree | 143f82331e80e98fb20363eeb7c207f80dca88ca | |
parent | 687992df6a48a35df61ac515b29528c887ee6373 (diff) | |
download | toybox-acfbb13661f425631ee7e7f01daa1eb2f3169945.tar.gz |
macOS: replace local strnstr with strcasestr.
bionic, glibc, macOS, and musl all have strcasestr
(see http://man7.org/linux/man-pages/man3/strstr.3.html).
macOS (via BSD) has a strnstr that does what strnstr sounds like it
should do by analogy with strnlen and strncpy.
So we at least need to rename strnstr, but it probably makes more sense
just to switch to strcasestr instead.
-rw-r--r-- | lib/lib.c | 11 | ||||
-rw-r--r-- | lib/lib.h | 1 | ||||
-rw-r--r-- | lib/portability.h | 3 | ||||
-rw-r--r-- | toys/lsb/passwd.c | 4 | ||||
-rw-r--r-- | toys/posix/grep.c | 2 |
5 files changed, 6 insertions, 15 deletions
@@ -1191,17 +1191,6 @@ char *next_printf(char *s, char **start) return 0; } -// Posix inexplicably hasn't got this, so find str in line. -char *strnstr(char *line, char *str) -{ - long len = strlen(str); - char *s; - - for (s = line; *s; s++) if (!strncasecmp(s, str, len)) break; - - return *s ? s : 0; -} - int dev_minor(int dev) { return ((dev&0xfff00000)>>12)|(dev&0xff); @@ -237,7 +237,6 @@ int qstrcmp(const void *a, const void *b); void create_uuid(char *uuid); char *show_uuid(char *uuid); char *next_printf(char *s, char **start); -char *strnstr(char *line, char *str); int dev_minor(int dev); int dev_major(int dev); int dev_makedev(int major, int minor); diff --git a/lib/portability.h b/lib/portability.h index c76beef9..59430e1b 100644 --- a/lib/portability.h +++ b/lib/portability.h @@ -88,6 +88,9 @@ char *dirname(char *path); char *__xpg_basename(char *path); static inline char *basename(char *path) { return __xpg_basename(path); } +#include <string.h> +char *strcasestr(const char *haystack, const char *needle); + // When building under obsolete glibc (Ubuntu 8.04-ish), hold its hand a bit. #if __GLIBC__ == 2 && __GLIBC_MINOR__ < 10 #define fstatat fstatat64 diff --git a/toys/lsb/passwd.c b/toys/lsb/passwd.c index 0f51c0c0..73024832 100644 --- a/toys/lsb/passwd.c +++ b/toys/lsb/passwd.c @@ -46,8 +46,8 @@ static void weak_check(char *new, char *old, char *user) if (strlen(new) < 6) msg = "too short"; if (*new) { - if (strnstr(new, user) || strnstr(user, new)) msg = "user"; - if (*old && (strnstr(new, old) || strnstr(old, new))) msg = "old"; + if (strcasestr(new, user) || strcasestr(user, new)) msg = "user"; + if (*old && (strcasestr(new, old) || strcasestr(old, new))) msg = "old"; } if (msg) xprintf("BAD PASSWORD: %s\n",msg); } diff --git a/toys/posix/grep.c b/toys/posix/grep.c index f0332cee..14cebf95 100644 --- a/toys/posix/grep.c +++ b/toys/posix/grep.c @@ -152,7 +152,7 @@ static void do_grep(int fd, char *name) fseek.arg = s = line; break; } - if (toys.optflags & FLAG_i) s = strnstr(line, seek->arg); + if (toys.optflags & FLAG_i) s = strcasestr(line, seek->arg); else s = strstr(line, seek->arg); if (s) break; } |