[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH] lib/nolibc: Add strtok and offset macro
Hi Razvan! This looks good. Just a couple of things I would like to ask. 1) Could you please move the definition of offsetof into a separate patch 2) Could you please add to this patch's commit message text "Functions are copied without modifications Taken from musl v1.1.19 Commit <55df09bfccbfe21fc9dd7d8f94550c0ff25ace04>" 3) Would you mind adding another patch on top of this, to bring the coding style to Unikraft coding standards. The script support/scripts/checkpatch.pl will help you. You do not have to fix every problem it reported, only reasonable ones (which do not make code looking ugly, and do not require to change the logic dramatically) Thanks. - Yuri Razvan Cojocaru <razvan.cojocaru93@xxxxxxxxx> writes: > Added strtok to string.h, taken from musl libc. > Also included offset macro to stddef.h > These two are needed for the Xen network netfront driver. > > Signed-off-by: Razvan Cojocaru <razvan.cojocaru93@xxxxxxxxx> > --- > lib/nolibc/include/stddef.h | 4 +++ > lib/nolibc/include/string.h | 4 +++ > lib/nolibc/string.c | 64 > +++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 72 insertions(+) > > diff --git a/lib/nolibc/include/stddef.h b/lib/nolibc/include/stddef.h > index 1e66615..a8ed523 100644 > --- a/lib/nolibc/include/stddef.h > +++ b/lib/nolibc/include/stddef.h > @@ -49,6 +49,10 @@ typedef __sptr ptrdiff_t; > #define NULL ((void *) 0) > #endif > > +#ifndef offsetof > +#define offsetof(t, d) __offsetof(t, d) > +#endif > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/nolibc/include/string.h b/lib/nolibc/include/string.h > index 4d12a5a..19fc5b1 100644 > --- a/lib/nolibc/include/string.h > +++ b/lib/nolibc/include/string.h > @@ -57,6 +57,10 @@ const char *strchr(const char *str, int c); > int strncmp(const char *str1, const char *str2, size_t len); > int strcmp(const char *str1, const char *str2); > > +size_t strcspn(const char *s, const char *c); > +size_t strspn(const char *s, const char *c); > +char *strtok(char *restrict s, const char *restrict sep); > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/nolibc/string.c b/lib/nolibc/string.c > index bf89106..a7f7b61 100644 > --- a/lib/nolibc/string.c > +++ b/lib/nolibc/string.c > @@ -166,3 +166,67 @@ int strcmp(const char *str1, const char *str2) > > return __res; > } > + > +/* Taken from musl libc */ > +#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) > +#define BITOP(a,b,op) \ > + ((a)[(size_t)(b)/(8*sizeof *(a))] op (size_t)1<<((size_t)(b)%(8*sizeof > *(a)))) > + > +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; > +} > + > +size_t strcspn(const char *s, const char *c) > +{ > + const char *a = s; > + size_t byteset[32/sizeof(size_t)]; > + > + if (!c[0] || !c[1]) return __strchrnul(s, *c)-a; > + > + memset(byteset, 0, sizeof byteset); > + for (; *c && BITOP(byteset, *(unsigned char *)c, |=); c++); > + for (; *s && !BITOP(byteset, *(unsigned char *)s, &); s++); > + return s-a; > +} > + > +size_t strspn(const char *s, const char *c) > +{ > + const char *a = s; > + size_t byteset[32/sizeof(size_t)] = { 0 }; > + > + if (!c[0]) return 0; > + if (!c[1]) { > + for (; *s == *c; s++); > + return s-a; > + } > + > + for (; *c && BITOP(byteset, *(unsigned char *)c, |=); c++); > + for (; *s && BITOP(byteset, *(unsigned char *)s, &); s++); > + return s-a; > +} > + > +char *strtok(char *restrict s, const char *restrict sep) > +{ > + static char *p; > + if (!s && !(s = p)) return NULL; > + s += strspn(s, sep); > + if (!*s) return p = 0; > + p = s + strcspn(s, sep); > + if (*p) *p++ = 0; > + else p = 0; > + return s; > +} > -- > 2.7.4 > > > _______________________________________________ > Minios-devel mailing list > Minios-devel@xxxxxxxxxxxxxxxxxxxx > https://lists.xenproject.org/mailman/listinfo/minios-devel -- Yuri Volchkov Software Specialist NEC Europe Ltd Kurfürsten-Anlage 36 D-69115 Heidelberg _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |