/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_strcat.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: lfirmin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/05 02:21:14 by lfirmin #+# #+# */ /* Updated: 2024/11/05 08:19:47 by lfirmin ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft.h" int should_add_space(char *dest, char *src) { size_t dest_len; size_t src_len; dest_len = ft_strlen(dest); src_len = ft_strlen(src); if (dest_len > 0 && src_len > 0) { if (dest[dest_len - 1] != ' ' && src[0] != ' ') return (1); } return (0); } char *create_new_str(char *dest, char *src, int add_space) { size_t dest_len; size_t src_len; char *new_str; dest_len = ft_strlen(dest); src_len = ft_strlen(src); if (add_space == 1) new_str = malloc(sizeof(char) * (dest_len + src_len + 2)); else new_str = malloc(sizeof(char) * (dest_len + src_len + 1)); if (!new_str) return (NULL); return (new_str); } void fill_new_str(char *new_str, char *dest, char *src, int add_space) { size_t dest_len; size_t src_len; dest_len = ft_strlen(dest); src_len = ft_strlen(src); if (add_space == 1) { ft_memset(new_str, 0, dest_len + src_len + 2); ft_strlcpy(new_str, dest, dest_len + 1); new_str[dest_len] = ' '; ft_strlcpy(new_str + dest_len + 1, src, src_len + 1); } else { ft_memset(new_str, 0, dest_len + src_len + 1); ft_strlcpy(new_str, dest, dest_len + 1); ft_strlcpy(new_str + dest_len, src, src_len + 1); } } char *ft_strcat(char *dest, char *src) { char *new_str; int add_space; if (!dest || !src) return (NULL); add_space = should_add_space(dest, src); new_str = create_new_str(dest, src, add_space); if (!new_str) return (NULL); fill_new_str(new_str, dest, src, add_space); free(dest); return (new_str); }