Implemented memset()

This commit is contained in:
Max Wash
2020-05-15 14:54:39 +01:00
parent a648339ce8
commit 135bc33b57
2 changed files with 29 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ extern "C" {
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 *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 int strcmp(const char *a, const char *b);

View 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;
}