/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_strlcat.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tosuman +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/05/11 16:55:00 by tosuman #+# #+# */ /* Updated: 2023/06/02 20:02:14 by tischmid ### ########.fr */ /* */ /* ************************************************************************** */ #include size_t ft_strlcat(char *dst, char const *src, size_t size) { size_t idx; size_t sidx; size_t slen; size_t dlen; slen = 0; while (src[slen]) ++slen; idx = 0; while (dst[idx]) ++idx; dlen = idx; if (dlen > size) return (slen + size); sidx = 0; size -= dlen; while (size-- > 1 && src[sidx]) dst[idx++] = src[sidx++]; dst[idx] = 0; return (dlen + slen); } /* Alternative implementation size_t ft_strlcat(char *dst, char const *src, size_t size) { size_t dst_len; size_t src_len; if ((!dst || !src) && size == 0) return (0); dst_len = 0; src_len = -1; while (*dst++) ++dst_len; while (src[++src_len]) ; if (size <= dst_len) return (size + src_len); if (--dst && dst_len > size) return (size + dst_len); while (src_len-- && ++dst_len < size) *dst++ = *src++; if (dst_len-- == size) --dst_len; *dst = 0; return (dst_len + src_len); } */