Just like the last two other libc related patches, this patch also eliminates 7 more source files from libc/string/ in favor of the equivalent ones in musl/src/string/.
In this case those 7 files differed only like in this example: ``` diff musl/src/string/strchrnul.c libc/string/strchrnul.c 10c10 < #define HASZERO(x) ((x)-ONES & ~(x) & HIGHS) --- > #define HASZERO(x) (((x)-ONES) & ~(x) & HIGHS) ``` Sometimes it would also have extra difference of '__restrict' vs "restrict" keyword in function signature which is explained in one of the other patches. The git history for many of those files (I have not checked each of the 7 ones) indicates that they were imported "as-is" from musl 7 years ago (for example see commit 5cd0168fc566e5f7263b04948b4df6695d8ae721). But then, `cd musl && git log src/string/memchr.c` for example, shows that no changes have ever been made to this file on musl side ever, at least per history of our clone of musl (there are later modifications in to this file in upstream musl but not in respect to the HASZERO macro). It is not clear why the macro HASZERO() had been modified like so in all these cases, but based on my understanding of the operator precedence in C, adding extra parentheses around '(x)-ONES' should not change the end result (the subtraction and negation should be evaluated first anyway followed by bitwise and). Signed-off-by: Waldemar Kozaczuk <[email protected]> --- Makefile | 16 ++++++++-------- libc/string/memccpy.c | 32 -------------------------------- libc/string/memchr.c | 24 ------------------------ libc/string/stpcpy.c | 29 ----------------------------- libc/string/stpncpy.c | 32 -------------------------------- libc/string/strchrnul.c | 27 --------------------------- libc/string/strlcpy.c | 32 -------------------------------- libc/string/strlen.c | 19 ------------------- 8 files changed, 8 insertions(+), 203 deletions(-) delete mode 100644 libc/string/memccpy.c delete mode 100644 libc/string/memchr.c delete mode 100644 libc/string/stpcpy.c delete mode 100644 libc/string/stpncpy.c delete mode 100644 libc/string/strchrnul.c delete mode 100644 libc/string/strlcpy.c delete mode 100644 libc/string/strlen.c diff --git a/Makefile b/Makefile index 7c7c0489..ff0ca4d7 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# O./libc/string/strdup.cSv makefile +# OSv makefile # # Copyright (C) 2015 Cloudius Systems, Ltd. # This work is open source software, licensed under the terms of the @@ -1556,8 +1556,8 @@ musl += string/bcmp.o musl += string/bcopy.o musl += string/bzero.o musl += string/index.o -libc += string/memccpy.o -libc += string/memchr.o +musl += string/memccpy.o +musl += string/memchr.o musl += string/memcmp.o libc += string/memcpy.o musl += string/memmem.o @@ -1569,15 +1569,15 @@ libc += string/memset.o libc += string/__memset_chk.o libc += string/rawmemchr.o musl += string/rindex.o -libc += string/stpcpy.o +musl += string/stpcpy.o libc += string/__stpcpy_chk.o -libc += string/stpncpy.o +musl += string/stpncpy.o musl += string/strcasecmp.o musl += string/strcasestr.o musl += string/strcat.o libc += string/__strcat_chk.o musl += string/strchr.o -libc += string/strchrnul.o +musl += string/strchrnul.o musl += string/strcmp.o musl += string/strcpy.o libc += string/__strcpy_chk.o @@ -1585,8 +1585,8 @@ musl += string/strcspn.o musl += string/strdup.o libc += string/strerror_r.o libc += string/strlcat.o -libc += string/strlcpy.o -libc += string/strlen.o +musl += string/strlcpy.o +musl += string/strlen.o musl += string/strncasecmp.o musl += string/strncat.o libc += string/__strncat_chk.o diff --git a/libc/string/memccpy.c b/libc/string/memccpy.c deleted file mode 100644 index 774cc5aa..00000000 --- a/libc/string/memccpy.c +++ /dev/null @@ -1,32 +0,0 @@ -#include <string.h> -#include <stdlib.h> -#include <stdint.h> -#include <limits.h> - -#define ALIGN (sizeof(size_t)-1) -#define ONES ((size_t)-1/UCHAR_MAX) -#define HIGHS (ONES * (UCHAR_MAX/2+1)) -#define HASZERO(x) (((x)-ONES) & ~(x) & HIGHS) - -void *memccpy(void *__restrict dest, const void *__restrict src, int c, size_t n) -{ - unsigned char *d = dest; - const unsigned char *s = src; - size_t *wd, k; - const size_t *ws; - - c = (unsigned char)c; - if (((uintptr_t)s & ALIGN) == ((uintptr_t)d & ALIGN)) { - for (; ((uintptr_t)s & ALIGN) && n && (*d=*s)!=c; n--, s++, d++); - if ((uintptr_t)s & ALIGN) goto tail; - k = ONES * c; - wd=(void *)d; ws=(const void *)s; - for (; n>=sizeof(size_t) && !HASZERO(*ws^k); - n-=sizeof(size_t), ws++, wd++) *wd = *ws; - d=(void *)wd; s=(const void *)ws; - } - for (; n && (*d=*s)!=c; n--, s++, d++); -tail: - if (*s==c) return d+1; - return 0; -} diff --git a/libc/string/memchr.c b/libc/string/memchr.c deleted file mode 100644 index 32e73135..00000000 --- a/libc/string/memchr.c +++ /dev/null @@ -1,24 +0,0 @@ -#include <string.h> -#include <stdlib.h> -#include <stdint.h> -#include <limits.h> - -#define SS (sizeof(size_t)) -#define ALIGN (sizeof(size_t)-1) -#define ONES ((size_t)-1/UCHAR_MAX) -#define HIGHS (ONES * (UCHAR_MAX/2+1)) -#define HASZERO(x) (((x)-ONES) & ~(x) & HIGHS) - -void *memchr(const void *src, int c, size_t n) -{ - const unsigned char *s = src; - c = (unsigned char)c; - for (; ((uintptr_t)s & ALIGN) && n && *s != c; s++, n--); - if (n && *s != c) { - const size_t *w; - size_t k = ONES * c; - for (w = (const void *)s; n>=SS && !HASZERO(*w^k); w++, n-=SS); - for (s = (const void *)w; n && *s != c; s++, n--); - } - return n ? (void *)s : 0; -} diff --git a/libc/string/stpcpy.c b/libc/string/stpcpy.c deleted file mode 100644 index bb04564f..00000000 --- a/libc/string/stpcpy.c +++ /dev/null @@ -1,29 +0,0 @@ -#include <string.h> -#include <stdlib.h> -#include <stdint.h> -#include <limits.h> -#include "libc.h" - -#define ALIGN (sizeof(size_t)) -#define ONES ((size_t)-1/UCHAR_MAX) -#define HIGHS (ONES * (UCHAR_MAX/2+1)) -#define HASZERO(x) (((x)-ONES) & ~(x) & HIGHS) - -char *__stpcpy(char *__restrict d, const char *__restrict s) -{ - size_t *wd; - const size_t *ws; - - if ((uintptr_t)s % ALIGN == (uintptr_t)d % ALIGN) { - for (; (uintptr_t)s % ALIGN; s++, d++) - if (!(*d=*s)) return d; - wd=(void *)d; ws=(const void *)s; - for (; !HASZERO(*ws); *wd++ = *ws++); - d=(void *)wd; s=(const void *)ws; - } - for (; (*d=*s); s++, d++); - - return d; -} - -weak_alias(__stpcpy, stpcpy); diff --git a/libc/string/stpncpy.c b/libc/string/stpncpy.c deleted file mode 100644 index 003a54cb..00000000 --- a/libc/string/stpncpy.c +++ /dev/null @@ -1,32 +0,0 @@ -#include <string.h> -#include <stdlib.h> -#include <stdint.h> -#include <limits.h> -#include "libc.h" - -#define ALIGN (sizeof(size_t)-1) -#define ONES ((size_t)-1/UCHAR_MAX) -#define HIGHS (ONES * (UCHAR_MAX/2+1)) -#define HASZERO(x) (((x)-ONES) & ~(x) & HIGHS) - -char *__stpncpy(char *__restrict d, const char *__restrict s, size_t n) -{ - size_t *wd; - const size_t *ws; - - if (((uintptr_t)s & ALIGN) == ((uintptr_t)d & ALIGN)) { - for (; ((uintptr_t)s & ALIGN) && n && (*d=*s); n--, s++, d++); - if (!n || !*s) goto tail; - wd=(void *)d; ws=(const void *)s; - for (; n>=sizeof(size_t) && !HASZERO(*ws); - n-=sizeof(size_t), ws++, wd++) *wd = *ws; - d=(void *)wd; s=(const void *)ws; - } - for (; n && (*d=*s); n--, s++, d++); -tail: - memset(d, 0, n); - return d; -} - -weak_alias(__stpncpy, stpncpy); - diff --git a/libc/string/strchrnul.c b/libc/string/strchrnul.c deleted file mode 100644 index b3db8942..00000000 --- a/libc/string/strchrnul.c +++ /dev/null @@ -1,27 +0,0 @@ -#include <string.h> -#include <stdlib.h> -#include <stdint.h> -#include <limits.h> -#include "libc.h" - -#define ALIGN (sizeof(size_t)) -#define ONES ((size_t)-1/UCHAR_MAX) -#define HIGHS (ONES * (UCHAR_MAX/2+1)) -#define HASZERO(x) (((x)-ONES) & ~(x) & HIGHS) - -char *__strchrnul(const char *s, int c) -{ - size_t *w, k; - - c = (unsigned char)c; - if (!c) return (char *)s + strlen(s); - - for (; (uintptr_t)s % ALIGN; s++) - if (!*s || *(unsigned char *)s == c) return (char *)s; - k = ONES * c; - for (w = (void *)s; !HASZERO(*w) && !HASZERO(*w^k); w++); - for (s = (void *)w; *s && *(unsigned char *)s != c; s++); - return (char *)s; -} - -weak_alias(__strchrnul, strchrnul); diff --git a/libc/string/strlcpy.c b/libc/string/strlcpy.c deleted file mode 100644 index 9108af40..00000000 --- a/libc/string/strlcpy.c +++ /dev/null @@ -1,32 +0,0 @@ -#include <string.h> -#include <stdlib.h> -#include <stdint.h> -#include <limits.h> -#include "libc.h" - -#define ALIGN (sizeof(size_t)-1) -#define ONES ((size_t)-1/UCHAR_MAX) -#define HIGHS (ONES * (UCHAR_MAX/2+1)) -#define HASZERO(x) (((x)-ONES) & ~(x) & HIGHS) - -size_t strlcpy(char *d, const char *s, size_t n) -{ - char *d0 = d; - size_t *wd; - const size_t *ws; - - if (!n--) goto finish; - if (((uintptr_t)s & ALIGN) == ((uintptr_t)d & ALIGN)) { - for (; ((uintptr_t)s & ALIGN) && n && (*d=*s); n--, s++, d++); - if (n && *s) { - wd=(void *)d; ws=(const void *)s; - for (; n>=sizeof(size_t) && !HASZERO(*ws); - n-=sizeof(size_t), ws++, wd++) *wd = *ws; - d=(void *)wd; s=(const void *)ws; - } - } - for (; n && (*d=*s); n--, s++, d++); - *d = 0; -finish: - return d-d0 + strlen(s); -} diff --git a/libc/string/strlen.c b/libc/string/strlen.c deleted file mode 100644 index 23fb650c..00000000 --- a/libc/string/strlen.c +++ /dev/null @@ -1,19 +0,0 @@ -#include <string.h> -#include <stdlib.h> -#include <stdint.h> -#include <limits.h> - -#define ALIGN (sizeof(size_t)) -#define ONES ((size_t)-1/UCHAR_MAX) -#define HIGHS (ONES * (UCHAR_MAX/2+1)) -#define HASZERO(x) (((x)-ONES) & ~(x) & HIGHS) - -size_t strlen(const char *s) -{ - const char *a = s; - const size_t *w; - for (; (uintptr_t)s % ALIGN; s++) if (!*s) return s-a; - for (w = (const void *)s; !HASZERO(*w); w++); - for (s = (const void *)w; *s; s++); - return s-a; -} -- 2.25.1 -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/osv-dev/20200727214145.16737-1-jwkozaczuk%40gmail.com.
