summaryrefslogtreecommitdiffstats
path: root/libft/src/ft_memmove.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libft/src/ft_memmove.c44
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);
}