50 lines
994 B
C
50 lines
994 B
C
/* [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 <string.h>
|
|
#include <stdlib.h>
|
|
|
|
#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
|