]> pd.if.org Git - pdclib/blob - functions/string/strlcat.c
PDCLib includes with quotes, not <>.
[pdclib] / functions / string / strlcat.c
1 /* strlcat( char *, const char *, size_t )
2
3    This file is part of the Public Domain C Library (PDCLib).
4    Permission is granted to use, modify, and / or redistribute at will.
5 */
6
7 #include <string.h>
8
9 #ifndef REGTEST
10
11 #pragma weak strlcat = _PDCLIB_strlcat
12 size_t _PDCLIB_strlcat(
13    char *restrict dst,
14    const char *restrict src,
15    size_t dstsize);
16
17 size_t _PDCLIB_strlcat(
18    char *restrict dst,
19    const char *restrict src,
20    size_t dstsize)
21 {
22     size_t needed = 0;
23     size_t j = 0;
24
25     while(dst[needed]) needed++;
26
27     while(needed < dstsize && (dst[needed] = src[j]))
28         needed++, j++;
29
30     while(src[j++]) needed++;
31     needed++;
32
33     if (needed > dstsize && dstsize)
34       dst[dstsize - 1] = 0;
35
36     return needed;
37 }
38
39 #endif
40
41 #ifdef TEST
42 #include "_PDCLIB_test.h"
43
44 int main( void )
45 {
46     char dstbuf[16];
47
48     strcpy(dstbuf, "hi");
49     TESTCASE_NOREG( strlcat(dstbuf, "", 16) == 3 );
50     TESTCASE_NOREG( strlcat(dstbuf, "hi", 16) == 5 );
51     TESTCASE_NOREG( strlcat(dstbuf, "hello, world", 16) == 17 );
52     TESTCASE_NOREG( strlcat(dstbuf, "hi", 16) == 18 );
53     TESTCASE_NOREG( strcmp(dstbuf, "hihihello, worl") == 0);
54     return TEST_RESULTS;
55 }
56
57 #endif