From a88906b423e57e74a5bbaf1e315a58770d51c628 Mon Sep 17 00:00:00 2001 From: FRIGN Date: Thu, 25 Feb 2016 22:59:35 +0100 Subject: [PATCH] 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. --- Makefile | 1 - TODO | 3 +++ join.c | 2 +- libutil/strmem.c | 23 ----------------------- util.h | 2 -- 5 files changed, 4 insertions(+), 27 deletions(-) delete mode 100644 libutil/strmem.c diff --git a/Makefile b/Makefile index 266ba86..5fd0b50 100644 --- 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 index fc0730d..225034a 100644 --- 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 index 3c05a6e..caf592f 100644 --- 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 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 -#include - -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 @@ 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);