diff options
-rw-r--r-- | sys/libkern/memset.c | 12 | ||||
-rw-r--r-- | sys/sys/libkern.h | 10 |
2 files changed, 17 insertions, 5 deletions
diff --git a/sys/libkern/memset.c b/sys/libkern/memset.c index 39ad120..895e672 100644 --- a/sys/libkern/memset.c +++ b/sys/libkern/memset.c @@ -23,18 +23,22 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -#include <sys/types.h> __FBSDID("$FreeBSD$"); -void *memset(void *, int, size_t); +#define LIBKERN_INLINE +#include <sys/types.h> +#include <sys/libkern.h> void * memset(void *b, int c, size_t len) { char *bb; - for (bb = (char *)b; len--; ) - *bb++ = c; + if (c == 0) + bzero(b, len); + else + for (bb = (char *)b; len--; ) + *bb++ = c; return (b); } diff --git a/sys/sys/libkern.h b/sys/sys/libkern.h index e3deb2d..445ee32 100644 --- a/sys/sys/libkern.h +++ b/sys/sys/libkern.h @@ -39,6 +39,11 @@ #include <sys/systm.h> #endif +#ifndef LIBKERN_INLINE +#define LIBKERN_INLINE static __inline +#define LIBKERN_BODY +#endif + /* BCD conversions. */ extern u_char const bcd2bin_data[]; extern u_char const bin2bcd_data[]; @@ -140,7 +145,9 @@ memcmp(const void *b1, const void *b2, size_t len) return (bcmp(b1, b2, len)); } -static __inline void * +LIBKERN_INLINE void *memset(void *, int, size_t); +#ifdef LIBKERN_BODY +LIBKERN_INLINE void * memset(void *b, int c, size_t len) { char *bb; @@ -152,6 +159,7 @@ memset(void *b, int c, size_t len) *bb++ = c; return (b); } +#endif static __inline char * strchr(const char *p, int ch) |