- // memset.c
- void *memset(void *dest, int val, unsigned int len) {
- unsigned char *ptr = dest;
- unsigned int value = (unsigned char)val; // Promote to avoid unnecessary casting
- // Use a word-by-word copy if possible
- while (len >= 4) {
- *(unsigned int*)ptr = value | (value << 8) | (value << 16) | (value << 24);
- ptr += 4;
- len -= 4;
- }
- // If any bytes are left, fill them
- while (len--) {
- *ptr++ = (unsigned char)value;
- }
- return dest;
- }