]> pd.if.org Git - pdclib.old/blob - functions/string/strlcpy.c
Add /strl(cpy|cat)/ under _BSD_SOURCE guards
[pdclib.old] / functions / string / strlcpy.c
1 /* strlcpy(
2    char *_PDCLIB_restrict _Dst,
3    const char *_PDCLIB_restrict _Src,
4    size_t _DstSize)
5
6    This file is part of the Public Domain C Library (PDCLib).
7    Permission is granted to use, modify, and / or redistribute at will.
8 */
9
10 #include <string.h>
11
12 #ifndef REGTEST
13
14 #pragma weak strlcpy = _PDCLIB_strlcpy
15 size_t _PDCLIB_strlcpy(
16     char *restrict dst,
17     const char *restrict src,
18     size_t dstsize);
19
20 size_t _PDCLIB_strlcpy(
21     char *restrict dst,
22     const char *restrict src,
23     size_t dstsize)
24 {
25     size_t needed = 0;
26     while(needed < dstsize && (dst[needed] = src[needed]))
27         needed++;
28
29     while(src[needed++]);
30
31     if (needed > dstsize && dstsize)
32       dst[dstsize - 1] = 0;
33
34     return needed;
35 }
36
37 #endif
38
39 #ifdef TEST
40 #include <_PDCLIB_test.h>
41
42 int main( void )
43 {
44     char destbuf[10];
45     TESTCASE_NOREG( strlcpy(NULL, "a", 0) == 2 );
46     TESTCASE_NOREG( strlcpy(destbuf, "a", 10) == 2 );
47     TESTCASE_NOREG( strcmp(destbuf, "a") == 0 );
48     TESTCASE_NOREG( strlcpy(destbuf, "helloworld", 10) == 11 );
49     TESTCASE_NOREG( strcmp(destbuf, "helloworl") == 0 );
50     return TEST_RESULTS;
51 }
52
53 #endif