/* strlcat( char *_PDCLIB_restrict _Dst, const char *_PDCLIB_restict _Src, size_t _DstSize) This file is part of the Public Domain C Library (PDCLib). Permission is granted to use, modify, and / or redistribute at will. */ #include #ifndef REGTEST #pragma weak strlcat = _PDCLIB_strlcat size_t _PDCLIB_strlcat( char *restrict dst, const char *restrict src, size_t dstsize); size_t _PDCLIB_strlcat( char *restrict dst, const char *restrict src, size_t dstsize) { size_t needed = 0; size_t j = 0; while(dst[needed]) needed++; while(needed < dstsize && (dst[needed] = src[j])) needed++, j++; while(src[j++]) needed++; needed++; if (needed > dstsize && dstsize) dst[dstsize - 1] = 0; return needed; } #endif #ifdef TEST #include <_PDCLIB_test.h> int main( void ) { char dstbuf[16]; strcpy(dstbuf, "hi"); TESTCASE_NOREG( strlcat(dstbuf, "", 16) == 3 ); TESTCASE_NOREG( strlcat(dstbuf, "hi", 16) == 5 ); TESTCASE_NOREG( strlcat(dstbuf, "hello, world", 16) == 17 ); TESTCASE_NOREG( strlcat(dstbuf, "hi", 16) == 18 ); TESTCASE_NOREG( strcmp(dstbuf, "hihihello, worl") == 0); return TEST_RESULTS; } #endif