Implemented memset()
This commit is contained in:
@@ -10,6 +10,7 @@ extern "C" {
|
|||||||
extern void *memcpy(void *dest, const void *src, size_t sz);
|
extern void *memcpy(void *dest, const void *src, size_t sz);
|
||||||
extern void *memcmp(const void *a, const void *b, size_t sz);
|
extern void *memcmp(const void *a, const void *b, size_t sz);
|
||||||
extern void *memmove(void *dest, const void *src, size_t sz);
|
extern void *memmove(void *dest, const void *src, size_t sz);
|
||||||
|
extern void *memset(void *ptr, int value, size_t sz);
|
||||||
|
|
||||||
extern size_t strlen(const char *str);
|
extern size_t strlen(const char *str);
|
||||||
extern int strcmp(const char *a, const char *b);
|
extern int strcmp(const char *a, const char *b);
|
||||||
|
|||||||
28
photon/libc/string/memset.c
Normal file
28
photon/libc/string/memset.c
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
void *memset(void *ptr, int value, size_t sz)
|
||||||
|
{
|
||||||
|
value = (unsigned char)value;
|
||||||
|
unsigned int realval =
|
||||||
|
value |
|
||||||
|
(value << 8) |
|
||||||
|
(value << 16) |
|
||||||
|
(value << 24);
|
||||||
|
|
||||||
|
unsigned char *buf = ptr;
|
||||||
|
size_t i = 0;
|
||||||
|
for (i = 0; i < sz; i += sizeof(unsigned int)) {
|
||||||
|
unsigned int *t = (unsigned int *)&buf[i];
|
||||||
|
*t = realval;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sz % sizeof(unsigned int)) {
|
||||||
|
i -= sizeof(unsigned int);
|
||||||
|
|
||||||
|
while (i < sz) {
|
||||||
|
buf[i++] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user