Rever the strmem() addition and add a TODO element
strmem() was not very well thought out. The thing is the following:
If the string contains a zero character, we want to match it, and not
stop right there in place.
The "real" solution is to use memmem() where needed and replace all
functions that assume zero-terminated-strings from standard input, which
could lead to early string-breakoffs.
This requires a strict tracking of string lengths.
diff --git a/Makefile b/Makefile
index 266ba86..5fd0b50 100644
--- a/Makefile
+++ b/Makefile
@@ -75,7 +75,6 @@
libutil/strcasestr.c\
libutil/strlcat.c\
libutil/strlcpy.c\
- libutil/strmem.c\
libutil/strsep.c\
libutil/strtonum.c\
libutil/unescape.c
diff --git a/TODO b/TODO
index fc0730d..225034a 100644
--- a/TODO
+++ b/TODO
@@ -15,5 +15,8 @@
pick a utility from the list in the README which has missing flags or
features noted.
+What also needs to be implemented is the capability of the tools to
+handle data with NUL-bytes in it.
+
[0] http://landley.net/toybox/roadmap.html
[1] http://git.suckless.org/ubase/
diff --git a/join.c b/join.c
index 3c05a6e..caf592f 100644
--- a/join.c
+++ b/join.c
@@ -225,7 +225,7 @@
beg = sp;
if (sep) {
- if (!(end = strmem(sp, sep, seplen)))
+ if (!(end = utfutf(sp, sep)))
eol = 1;
if (!eol) {
diff --git a/libutil/strmem.c b/libutil/strmem.c
deleted file mode 100644
index 597d5ca..0000000
--- a/libutil/strmem.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stddef.h>
-#include <string.h>
-
-char *
-strmem(char *haystack, char *needle, size_t needlelen)
-{
- size_t i;
-
- for (i = 0; i < needlelen; i++) {
- if (haystack[i] == '\0') {
- return NULL;
- }
- }
-
- for (; haystack[i]; i++) {
- if (!(memcmp(haystack + i - needlelen, needle, needlelen))) {
- return (haystack + i - needlelen);
- }
- }
-
- return NULL;
-}
diff --git a/util.h b/util.h
index f10bf46..4c973d1 100644
--- a/util.h
+++ b/util.h
@@ -58,8 +58,6 @@
#undef strsep
char *strsep(char **, const char *);
-char *strmem(char *, char *, size_t);
-
/* regex */
int enregcomp(int, regex_t *, const char *, int);
int eregcomp(regex_t *, const char *, int);