Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Side by Side Diff: fusl/src/string/memchr.c

Issue 1714623002: [fusl] clang-format fusl (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: headers too Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #include <string.h> 1 #include <string.h>
2 #include <stdint.h> 2 #include <stdint.h>
3 #include <limits.h> 3 #include <limits.h>
4 4
5 #define SS (sizeof(size_t)) 5 #define SS (sizeof(size_t))
6 #define ALIGN (sizeof(size_t)-1) 6 #define ALIGN (sizeof(size_t) - 1)
7 #define ONES ((size_t)-1/UCHAR_MAX) 7 #define ONES ((size_t)-1 / UCHAR_MAX)
8 #define HIGHS (ONES * (UCHAR_MAX/2+1)) 8 #define HIGHS (ONES * (UCHAR_MAX / 2 + 1))
9 #define HASZERO(x) ((x)-ONES & ~(x) & HIGHS) 9 #define HASZERO(x) ((x)-ONES & ~(x)&HIGHS)
10 10
11 void *memchr(const void *src, int c, size_t n) 11 void* memchr(const void* src, int c, size_t n) {
12 { 12 const unsigned char* s = src;
13 » const unsigned char *s = src; 13 c = (unsigned char)c;
14 » c = (unsigned char)c; 14 for (; ((uintptr_t)s & ALIGN) && n && *s != c; s++, n--)
15 » for (; ((uintptr_t)s & ALIGN) && n && *s != c; s++, n--); 15 ;
16 » if (n && *s != c) { 16 if (n && *s != c) {
17 » » const size_t *w; 17 const size_t* w;
18 » » size_t k = ONES * c; 18 size_t k = ONES * c;
19 » » for (w = (const void *)s; n>=SS && !HASZERO(*w^k); w++, n-=SS); 19 for (w = (const void*)s; n >= SS && !HASZERO(*w ^ k); w++, n -= SS)
20 » » for (s = (const void *)w; n && *s != c; s++, n--); 20 ;
21 » } 21 for (s = (const void*)w; n && *s != c; s++, n--)
22 » return n ? (void *)s : 0; 22 ;
23 }
24 return n ? (void*)s : 0;
23 } 25 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698