summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/libkern/memset.c12
-rw-r--r--sys/sys/libkern.h10
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)
OpenPOWER on IntegriCloud