[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [UNIKRAFT PATCH] lib/nolibc: Add strtok and offset macro



Hey, Razvan,

thanks for the updated patches. Regarding the style, I still think
bringing it to Unikraft coding style is a good idea. I would still add
another patch on top of this one which does this. But it is not too
strong position. Let's have another opinion.

Simon what do you think?

-Yuri

Razvan Cojocaru <razvan.cojocaru93@xxxxxxxxx> writes:

> Hey Yuri,
>
> I'll split the patch in 2, and add the commit message text to both.
>
> About the checkpatch, it seems to keep complaining about for one-liners.
> But I left them as-is, since I believe that is the proper coding style for
> this situation.
> E.g. for (something; something; something);
> gives an
> ERROR: trailing statements should be on next line
>
>
> Razvan
>
> În mie., 1 aug. 2018 la 18:10, Yuri Volchkov <yuri.volchkov@xxxxxxxxx> a
> scris:
>
>> 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

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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.