diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-10-08 18:33:20 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-10-08 18:33:20 +0200 |
| commit | f723389e5143c9ee0bc3d9774bb523b1c752b74c (patch) | |
| tree | 3ef33b7024c9e6c0680ddce684dcc5a5b13bbca1 /ft_memmove.c | |
| parent | 4e2e8aac225f2a226573ae36e5327a8c4073bbbc (diff) | |
| download | libft-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.c | 36 |
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); } |
