aboutsummaryrefslogtreecommitdiff
path: root/ft_memmove.c
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-10-08 18:33:20 +0200
committerCharles <sircharlesaze@gmail.com>2019-10-08 18:33:20 +0200
commitf723389e5143c9ee0bc3d9774bb523b1c752b74c (patch)
tree3ef33b7024c9e6c0680ddce684dcc5a5b13bbca1 /ft_memmove.c
parent4e2e8aac225f2a226573ae36e5327a8c4073bbbc (diff)
downloadlibft-f723389e5143c9ee0bc3d9774bb523b1c752b74c.tar.gz
libft-f723389e5143c9ee0bc3d9774bb523b1c752b74c.tar.bz2
libft-f723389e5143c9ee0bc3d9774bb523b1c752b74c.zip
Fix ft_memmove and calloc
- memmove doesnt depend on a buffer size - calloc return NULL if count or size == 0 - added byte type
Diffstat (limited to 'ft_memmove.c')
-rw-r--r--ft_memmove.c36
1 files changed, 14 insertions, 22 deletions
diff --git a/ft_memmove.c b/ft_memmove.c
index 185fd36..d5d6789 100644
--- a/ft_memmove.c
+++ b/ft_memmove.c
@@ -12,32 +12,24 @@
#include <stdlib.h>
#include <string.h>
-
-#define BUF_SIZE (2 << 12)
+#include "libft.h"
void *ft_memmove(void *dst, const void *src, size_t len)
{
- size_t i;
- size_t j;
- size_t k;
- unsigned char tmp[BUF_SIZE];
+ size_t i;
+ t_byte *dst_cast;
+ t_byte *src_cast;
if (dst == NULL && src == NULL)
return (NULL);
- i = 0;
- while (i < len)
- {
- j = 0;
- while (j < BUF_SIZE && i < len)
- {
- tmp[j] = ((unsigned char*)src)[i];
- j++;
- i++;
- }
- k = -1;
- while (++k < j)
- ((unsigned char*)dst)[k] = tmp[k];
- i++;
- }
- return (dst);
+ dst_cast = (t_byte*)dst;
+ src_cast = (t_byte*)src;
+ i = -1;
+ if (dst_cast < src_cast)
+ while (++i < len)
+ dst_cast[i] = src_cast[i];
+ else
+ while (len-- > 0)
+ dst_cast[len] = src_cast[len];
+ return (dst);
}