On Tue, Jul 28, 2020 at 12:41 AM Waldemar Kozaczuk <[email protected]>
wrote:

> 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).
>

Yes. I suspect that at some point a compiler warning warned about the
precedence *maybe*
being wrong, so the extra parentheses were added to shut this compiler up.
As I noted earlier, it's probably not *us* that did this - the files in
libc/ were taken from musl
at some point which is *not* the same time point that the musl/ directory
is at (it's not even
necessarily one time point - different people copied different files from
musl at different times).
So it might have been a change that happened in the Musl code based. If
you're really curious
you can go look at the Musl git history.


> 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
> .
>

-- 
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/CANEVyjuc7573yytai8GFiOZuJ-vDLDkokAQHA2PUjmdb%2Bn60Rw%40mail.gmail.com.

Reply via email to