From b86949e2849b1be7ed8b24efcc693b9eae2fcda8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Tue, 15 Oct 2024 14:29:15 +0200 Subject: [PATCH] ft_memmove: initial implementation This was tricky to visualize, consider bringing pen and paper next time --- Makefile | 5 +++-- ft_memmove.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ libft.h | 3 ++- 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 ft_memmove.c diff --git a/Makefile b/Makefile index c9f22fb..6199be1 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: kcolin +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/10/14 13:43:59 by kcolin #+# #+# # -# Updated: 2024/10/15 13:37:50 by kcolin ### ########.fr # +# Updated: 2024/10/15 13:56:10 by kcolin ### ########.fr # # # # **************************************************************************** # @@ -20,7 +20,8 @@ SOURCES = ft_isalpha.c \ ft_strlen.c \ ft_memset.c \ ft_bzero.c \ - ft_memcpy.c + ft_memcpy.c \ + ft_memmove.c OBJECTS = $(SOURCES:.c=.o) CC = gcc diff --git a/ft_memmove.c b/ft_memmove.c new file mode 100644 index 0000000..400c042 --- /dev/null +++ b/ft_memmove.c @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: kcolin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/10/15 13:57:12 by kcolin #+# #+# */ +/* Updated: 2024/10/15 14:12:15 by kcolin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +/* + * case 1: dst overlaps at start of src. + * src is before dst. + * copy back to front + * + * case 2: dst overlaps at beginning of src. + * src is after dst. + * copy front to back. + * + * case 3: dst and src do not overlap + * it doesn't matter how the data is copied + * merge with case 2 + */ +void *ft_memmove(void *dst, const void *src, t_size len) +{ + t_size i; + + if (dst >= src && dst <= (src + len)) + { + i = len; + while (i > 0) + { + i--; + ((char *)dst)[i] = ((char *)src)[i]; + } + } + else + { + ft_memcpy(dst, src, len); + } + return (dst); +} diff --git a/libft.h b/libft.h index 4e87f85..8dab756 100644 --- a/libft.h +++ b/libft.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/15 10:11:54 by kcolin #+# #+# */ -/* Updated: 2024/10/15 13:37:25 by kcolin ### ########.fr */ +/* Updated: 2024/10/15 13:56:53 by kcolin ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,5 +26,6 @@ t_size ft_strlen(const char *s); void *ft_memset(void *dest, int c, t_size len); void ft_bzero(void *b, t_size len); void *ft_memcpy(void *dst, const void *src, t_size len); +void *ft_memmove(void *dst, const void *src, t_size len); #endif