]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/ntp/libntp/strdup.c
amd64: use register macros for gdb_cpu_getreg()
[FreeBSD/FreeBSD.git] / contrib / ntp / libntp / strdup.c
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