/ libft / src / ft_basics / ft_strlcat.c
ft_strlcat.c
 1  /* ************************************************************************** */
 2  /*                                                                            */
 3  /*                                                        :::      ::::::::   */
 4  /*   ft_strlcat.c                                       :+:      :+:    :+:   */
 5  /*                                                    +:+ +:+         +:+     */
 6  /*   By: ll-hotel <ll-hotel@student.42lyon.fr>      +#+  +:+       +#+        */
 7  /*                                                +#+#+#+#+#+   +#+           */
 8  /*   Created: 2023/11/07 13:33:54 by ll-hotel          #+#    #+#             */
 9  /*   Updated: 2024/02/23 03:43:31 by ll-hotel         ###   ########.fr       */
10  /*                                                                            */
11  /* ************************************************************************** */
12  
13  static unsigned long long	_strlen(const char *s)
14  {
15  	unsigned long long	l;
16  
17  	l = 0;
18  	while (s[l])
19  		l++;
20  	return (l);
21  }
22  
23  unsigned long long	ft_strlcat(char *dst, const char *src, \
24  		unsigned long long size)
25  {
26  	const unsigned long long	len_dst = _strlen(dst);
27  	const unsigned long long	len_src = _strlen(src);
28  	unsigned long long			l;
29  	unsigned long long			i;
30  
31  	l = 0;
32  	if (!size)
33  		return (len_src);
34  	while (l < size && dst[l])
35  		l++;
36  	i = 0;
37  	while (l < size - 1 && src[i])
38  		dst[l++] = src[i++];
39  	if (len_dst <= size)
40  		dst[l] = 0;
41  	if (size < len_dst)
42  		return (size + len_src);
43  	return (len_dst + len_src);
44  }