aboutsummaryrefslogtreecommitdiff
path: root/src/mem/ft_memmove.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ft_memmove.c')
-rw-r--r--src/mem/ft_memmove.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/src/mem/ft_memmove.c b/src/mem/ft_memmove.c
index aa107bd..73e26b8 100644
--- a/src/mem/ft_memmove.c
+++ b/src/mem/ft_memmove.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/10/07 10:03:21 by cacharle #+# #+# */
-/* Updated: 2019/11/20 03:31:00 by cacharle ### ########.fr */
+/* Updated: 2019/11/21 18:43:26 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -14,20 +14,22 @@
void *ft_memmove(void *dst, const void *src, size_t len)
{
- size_t i;
- t_byte *dst_cast;
- t_byte *src_cast;
+ long int *long_dst;
+ const long int *long_src;
+ void *dst_copy;
- if (dst == src)
- 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);
+ if (dst >= src)
+ return (ft_memcpy(dst, src, len));
+ dst_copy = dst;
+ while (len % 8 > 0)
+ {
+ len--;
+ *(t_byte*)dst++ = *(t_byte*)src++;
+ }
+ long_dst = dst;
+ long_src = src;
+ len /= 8;
+ while (len-- > 0)
+ *long_dst++ = *long_src++;
+ return (dst_copy);
}