memcpy and memmove fix
This commit is contained in:
14
ft_memcpy.c
14
ft_memcpy.c
@@ -6,7 +6,7 @@
|
|||||||
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/11/05 11:46:16 by dgaillet #+# #+# */
|
/* Created: 2025/11/05 11:46:16 by dgaillet #+# #+# */
|
||||||
/* Updated: 2025/11/05 17:02:06 by dgaillet ### ########lyon.fr */
|
/* Updated: 2025/11/09 20:00:45 by dgaillet ### ########lyon.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@@ -14,9 +14,15 @@
|
|||||||
|
|
||||||
void *ft_memcpy(void *dest, const void *src, size_t n)
|
void *ft_memcpy(void *dest, const void *src, size_t n)
|
||||||
{
|
{
|
||||||
if (n <= 0)
|
size_t i;
|
||||||
|
|
||||||
|
if (!dest && !src)
|
||||||
return (dest);
|
return (dest);
|
||||||
*((unsigned char *) dest) = *((unsigned char *) src);
|
i = 0;
|
||||||
ft_memcpy(dest + 1, src + 1, n - 1);
|
while (i < n)
|
||||||
|
{
|
||||||
|
((unsigned char *) dest)[i] = ((unsigned char *) src)[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
return (dest);
|
return (dest);
|
||||||
}
|
}
|
||||||
|
|||||||
21
ft_memmove.c
21
ft_memmove.c
@@ -6,28 +6,29 @@
|
|||||||
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/11/05 13:17:42 by dgaillet #+# #+# */
|
/* Created: 2025/11/05 13:17:42 by dgaillet #+# #+# */
|
||||||
/* Updated: 2025/11/06 12:01:28 by dgaillet ### ########lyon.fr */
|
/* Updated: 2025/11/09 20:15:29 by dgaillet ### ########lyon.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "libft.h"
|
#include "libft.h"
|
||||||
|
|
||||||
void *ft_rev_memcpy(void *dest, const void *src, size_t n)
|
static void *ft_rev_memcpy(void *dest, const void *src, size_t n)
|
||||||
{
|
|
||||||
if (n <= 0)
|
|
||||||
{
|
{
|
||||||
|
if ((!dest && !src) || n == 0)
|
||||||
return (dest);
|
return (dest);
|
||||||
|
n--;
|
||||||
|
while (n > 0)
|
||||||
|
{
|
||||||
|
((unsigned char *) dest)[n] = ((unsigned char *) src)[n];
|
||||||
|
n--;
|
||||||
}
|
}
|
||||||
*((char *) dest) = *((char *) src);
|
((unsigned char *) dest)[n] = ((unsigned char *) src)[n];
|
||||||
ft_rev_memcpy(dest - 1, src - 1, n - 1);
|
|
||||||
return (dest);
|
return (dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *ft_memmove(void *dest, const void *src, size_t n)
|
void *ft_memmove(void *dest, const void *src, size_t n)
|
||||||
{
|
{
|
||||||
if (dest < src)
|
if (dest < src)
|
||||||
ft_memcpy(dest, src, n);
|
return (ft_memcpy(dest, src, n));
|
||||||
else
|
return (ft_rev_memcpy(dest, src, n));
|
||||||
ft_rev_memcpy(dest + (n - 1), src + (n - 1), n);
|
|
||||||
return (dest);
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user