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 *
strdup(const char * s)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
memchr(const void * s,int c,size_t n)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
strnlen(const char * s,size_t n)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