aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2018-11-28 12:27:14 -0800
committerRob Landley <rob@landley.net>2018-11-28 19:03:25 -0600
commitacfbb13661f425631ee7e7f01daa1eb2f3169945 (patch)
tree143f82331e80e98fb20363eeb7c207f80dca88ca
parent687992df6a48a35df61ac515b29528c887ee6373 (diff)
downloadtoybox-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.c11
-rw-r--r--lib/lib.h1
-rw-r--r--lib/portability.h3
-rw-r--r--toys/lsb/passwd.c4
-rw-r--r--toys/posix/grep.c2
5 files changed, 6 insertions, 15 deletions
diff --git a/lib/lib.c b/lib/lib.c
index 03f0a24d..11acba0d 100644
--- a/lib/lib.c
+++ b/lib/lib.c
@@ -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);
diff --git a/lib/lib.h b/lib/lib.h
index 8a45e080..14bb7cf6 100644
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -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;
}