Memory will now be set in chunks of the size of an unsigned long long,
until there are less characters left than the chunk size.
---
src/ft_memset.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/ft_memset.c b/src/ft_memset.c
index 83617b4..7308712 100644
--- a/src/ft_memset.c
+++ b/src/ft_memset.c
@@ -14,9 +14,25 @@
void *ft_memset(void *b, int c, size_t len)
{
- size_t i;
+ size_t i;
+ size_t chunk_size;
+ unsigned long long chunk;
+ chunk = 0;
+ chunk_size = sizeof(unsigned long long);
+ i = chunk_size / sizeof(unsigned char);
+ while (i > 0)
+ {
+ chunk <<= 8;
+ chunk |= (unsigned long long)(unsigned char)c;
+ i--;
+ }
i = 0;
+ while (len >= chunk_size && i < (len - chunk_size))
+ {
+ *(unsigned long long *)&(((unsigned char *)b)[i]) = chunk;
+ i += chunk_size;
+ }
while (i < len)
{
((unsigned char *)b)[i] = (unsigned char)c;
--
2.17.1