commit a88906b423e57e74a5bbaf1e315a58770d51c628
parent 33960886668653dbb35bbba26d8d993aaf4f4d06
Author: FRIGN <dev@frign.de>
Date: Thu, 25 Feb 2016 22:59:35 +0100
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.
Diffstat:
5 files changed, 4 insertions(+), 27 deletions(-)
diff --git a/Makefile b/Makefile
@@ -75,7 +75,6 @@ LIBUTILSRC =\
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
@@ -15,5 +15,8 @@ If you are looking for some work to do on sbase, another option is to
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
@@ -225,7 +225,7 @@ makeline(char *s, size_t len)
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
@@ -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
@@ -58,8 +58,6 @@ size_t estrlcpy(char *, const char *, size_t);
#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);