1 #include <config.h> 2 3 #include <ntp_assert.h> 4 #include <string.h> 5 #include "ntp_malloc.h" 6 #include "l_stdlib.h" 7 8 #define STRDUP_EMPTY_UNIT 9 10 #ifndef HAVE_STRDUP 11 # undef STRDUP_EMPTY_UNIT 12 char *strdup(const char *s); 13 char * 14 strdup( 15 const char *s 16 ) 17 { 18 size_t octets; 19 char * cp; 20 21 REQUIRE(s); 22 octets = strlen(s) + 1; 23 if ((cp = malloc(octets)) == NULL) 24 return NULL; 25 memcpy(cp, s, octets); 26 27 return cp; 28 } 29 #endif 30 31 #ifndef HAVE_MEMCHR 32 # undef STRDUP_EMPTY_UNIT 33 void *memchr(const void *s, int c, size_t n) 34 { 35 const unsigned char *p = s; 36 while (n && *p != c) { 37 --n; 38 ++p; 39 } 40 return n ? (char*)p : NULL; 41 } 42 #endif 43 44 #ifndef HAVE_STRNLEN 45 # undef STRDUP_EMPTY_UNIT 46 size_t strnlen(const char *s, size_t n) 47 { 48 const char *e = memchr(s, 0, n); 49 return e ? (size_t)(e - s) : n; 50 } 51 #endif 52 53 #ifdef STRDUP_EMPTY_UNIT 54 int strdup_c_nonempty_compilation_unit; 55 #endif 56