diff options
Diffstat (limited to 'libft/src/ft_memmove.c')
-rw-r--r-- | libft/src/ft_memmove.c | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/libft/src/ft_memmove.c b/libft/src/ft_memmove.c index 5d79fab..1aa3588 100644 --- a/libft/src/ft_memmove.c +++ b/libft/src/ft_memmove.c @@ -1,14 +1,13 @@ /* ************************************************************************** */ -/* LE - / */ -/* / */ -/* ft_memmove.c .:: .:/ . .:: */ -/* +:+:+ +: +: +:+:+ */ -/* By: rbousset <marvin@le-101.fr> +:+ +: +: +:+ */ -/* #+# #+ #+ #+# */ -/* Created: 2019/10/08 18:57:44 by rbousset #+# ## ## #+# */ -/* Updated: 2019/10/13 08:38:47 by rbousset ### #+. /#+ ###.fr */ -/* / */ -/* / */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/14 17:06:42 by rbousset #+# #+# */ +/* Updated: 2020/02/14 17:06:42 by rbousset ### ########lyon.fr */ +/* */ /* ************************************************************************** */ #include <libft.h> @@ -17,11 +16,26 @@ void *ft_memmove(void *dst, const void *src, size_t len) { - char buff[len]; + const char *from = (const char*)src; + char *to; + int i; + size_t j; - if (src == NULL && dst == NULL && len != 0) - return (NULL); - ft_memcpy(buff, src, len); - ft_memcpy(dst, buff, len); + to = (char*)dst; + if (to > from && to - from < (int)len) + { + i = len; + while (--i >= 0) + to[i] = from[i]; + return (dst); + } + if (from > to && from - to < (int)len) + { + j = -1; + while (++j < len) + to[j] = from[j]; + return (dst); + } + ft_memcpy(dst, src, len); return (dst); } |