/* [XSI] char* strdup(const char *) This file is part of the Public Domain C Library (PDCLib). Permission is granted to use, modify, and / or redistribute at will. */ #ifdef REGTEST #define _POSIX_C_SOURCE 200809L #endif #include #include #ifndef REGTEST char *strdup(const char *s) { char* ns = NULL; if(s) { size_t len = strlen(s) + 1; ns = malloc(len); if(ns) strncpy(ns, s, len); } return ns; } #endif #ifdef TEST #include <_PDCLIB_test.h> int main( void ) { const char *teststr = "Hello, world"; const char *teststr2 = "An alternative test string with non-7-bit characters \xFE\x8C\n"; char *testres, *testres2; TESTCASE((testres = strdup(teststr)) != NULL); TESTCASE((testres2 = strdup(teststr2)) != NULL); TESTCASE(strcmp(testres, teststr) == 0); TESTCASE(strcmp(testres2, teststr2) == 0); free(testres); free(testres2); return TEST_RESULTS; } #endif