#include <stdio.h>
#include <assert.h>
#include <string.h>

unsigned int len(char* str)
{
	unsigned int		i;
	i = 0;
	while (str[i] != '\0')
	{
		i++;
	}
	return i;
}

unsigned int ft_strlcat(char* dest, char* src, unsigned int size)
{
	unsigned int		dest_len;
	unsigned int		src_len;
	unsigned int		                   i;
    int     i_len;

	dest_len = len(dest);
	src_len = len(src);
    i = 0;
    i_len = size - dest_len - 1;
    if (i_len < 0)
        i_len = 0;
	while (i < i_len)
	{
		dest[dest_len + i] = src[i];
		i++;
	}
    dest[dest_len + i] = '\0';
	return dest_len + src_len;
}

int main(void)
{
    char dest1[20] = "Hello, ";
    char src1[] = "world!";
    size_t dest_size1 = sizeof(dest1);
    size_t result1 = ft_strlcat(dest1, src1, dest_size1);
    assert(strcmp(dest1, "Hello, world!") == 0);
    assert(result1 == 13);

    char dest2[15] = "foo";
    char src2[] = "bar";
    size_t dest_size2 = sizeof(dest2);
    size_t result2 = ft_strlcat(dest2, src2, dest_size2);
    assert(strcmp(dest2, "foobar") == 0);
    assert(result2 == 6);

    char dest3[10] = "hello";
    char src3[] = "world";
    size_t dest_size3 = 5;
    size_t result3 = ft_strlcat(dest3, src3, dest_size3);
    assert(strcmp(dest3, "hello") == 0); // no concatenation should happen
    assert(result3 == 10); // the result length if concatenation had happened

    char dest4[10] = "hello";
    char src4[] = "world";
    size_t dest_size4 = 8;
    size_t result4 = ft_strlcat(dest4, src4, dest_size4);
    assert(strcmp(dest4, "hellowo") == 0); // concatenated up to buffer size - 1
    assert(result4 == 10); // the result length if concatenation had happened

    char dest5[10] = "test";
    char src5[] = "";
    size_t dest_size5 = sizeof(dest5);
    size_t result5 = ft_strlcat(dest5, src5, dest_size5);
    assert(strcmp(dest5, "test") == 0);
    assert(result5 == 4);

    char dest6[10] = "";
    char src6[] = "test";
    size_t dest_size6 = sizeof(dest6);
    size_t result6 = ft_strlcat(dest6, src6, dest_size6);
    assert(strcmp(dest6, "test") == 0);
    assert(result6 == 4);

    char dest7[10] = "";
    char src7[] = "";
    size_t dest_size7 = sizeof(dest7);
    size_t result7 = ft_strlcat(dest7, src7, dest_size7);
    assert(strcmp(dest7, "") == 0);
    assert(result7 == 0);

    char dest8[10] = "hello";
    char src8[] = "world";
    size_t dest_size8 = 0;
    size_t result8 = ft_strlcat(dest8, src8, dest_size8);
    assert(strcmp(dest8, "hello") == 0); // no change should happen
    assert(result8 == 10); // the result length if concatenation had happened

    char dest9[30] = "123";
    char src9[] = "456789";
    size_t result9 = ft_strlcat(dest9, src9, 7);
    assert(strcmp(dest9, "123456") == 0); // no change should happen
    assert(result9 == 9); // the result length if concatenation had happened

    char dest10[30] = "123";
    char src10[] = "456789";
    size_t result10 = ft_strlcat(dest10, src10, 3);
    assert(strcmp(dest10, "123") == 0); // no change should happen
    assert(result10 == 9); // the result length if concatenation had happened

    printf("All tests passed.\n");

    return 0;
}

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: