X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fwchar%2Fwcsncpy.c;fp=functions%2Fwchar%2Fwcsncpy.c;h=6d0e4d284a748d5884eb45701af4188c7e81901d;hb=507d3eccbf4c74e4694165f9e00ab79d894b4f66;hp=0000000000000000000000000000000000000000;hpb=0150bb9ffe66236b6a47c5800d8beef669d5c047;p=pdclib.old diff --git a/functions/wchar/wcsncpy.c b/functions/wchar/wcsncpy.c new file mode 100644 index 0000000..6d0e4d2 --- /dev/null +++ b/functions/wchar/wcsncpy.c @@ -0,0 +1,43 @@ +/* wchar_t * wcsncpy( wchar_t restrict *, const wchar_t restrict * , size_t ); + + 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 + +wchar_t *wcsncpy( wchar_t * _PDCLIB_restrict s1, + const wchar_t * _PDCLIB_restrict s2, + size_t n ) +{ + wchar_t * rc = s1; + while ( ( n > 0 ) && ( *s1++ = *s2++ ) ) + { + /* Cannot do "n--" in the conditional as size_t is unsigned and we have + to check it again for >0 in the next loop below, so we must not risk + underflow. + */ + --n; + } + /* Checking against 1 as we missed the last --n in the loop above. */ + while ( n-- > 1 ) + { + *s1++ = '\0'; + } + return rc; +} + + +#endif + +#ifdef TEST +#include <_PDCLIB_test.h> + +int main( void ) +{ + return TEST_RESULTS; +} + +#endif