4.3BSD says that bcopy and bzero are defined in strings.h, not string.h
[people/xl0/gpxe.git] / src / include / strings.h
1 #ifndef _STRINGS_H
2 #define _STRINGS_H
3
4 #include <limits.h>
5 #include <string.h>
6
7 static inline __attribute__ (( always_inline )) int
8 __constant_flsl ( unsigned long x ) {
9         int r = 0;
10
11 #if ULONG_MAX > 0xffffffff
12         if ( x & 0xffffffff00000000UL ) {
13                 x >>= 32;
14                 r += 32;
15         }
16 #endif
17         if ( x & 0xffff0000UL ) {
18                 x >>= 16;
19                 r += 16;
20         }
21         if ( x & 0xff00 ) {
22                 x >>= 8;
23                 r += 8;
24         }
25         if ( x & 0xf0 ) {
26                 x >>= 4;
27                 r += 4;
28         }
29         if ( x & 0xc ) {
30                 x >>= 2;
31                 r += 2;
32         }
33         if ( x & 0x2 ) {
34                 x >>= 1;
35                 r += 1;
36         }
37         if ( x & 0x1 ) {
38                 r += 1;
39         }
40         return r;
41 }
42
43 #define __constant_fls(x) __constant_flsl(x)
44
45 /* We don't actually have these functions yet */
46 extern int __fls ( int x );
47 extern int __flsl ( long x );
48
49 #define flsl( x ) \
50         ( __builtin_constant_p ( x ) ? __constant_flsl ( x ) : __flsl ( x ) )
51
52 #define fls( x ) \
53         ( __builtin_constant_p ( x ) ? __constant_fls ( x ) : __fls ( x ) )
54
55 extern int strcasecmp ( const char *s1, const char *s2 );
56
57 static inline __attribute__ (( always_inline )) void
58 bcopy ( const void *src, void *dest, size_t n ) {
59         memmove ( dest, src, n );
60 }
61
62 static inline __attribute__ (( always_inline )) void
63 bzero ( void *s, size_t n ) {
64         memset ( s, 0, n );
65 }
66
67 #endif /* _STRINGS_H */