aboutsummaryrefslogtreecommitdiffstats
path: root/libntp/strdup.c
diff options
context:
space:
mode:
Diffstat (limited to 'libntp/strdup.c')
-rw-r--r--libntp/strdup.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/libntp/strdup.c b/libntp/strdup.c
index 62d5a16d433c..8af9ff81b39c 100644
--- a/libntp/strdup.c
+++ b/libntp/strdup.c
@@ -1,13 +1,15 @@
#include <config.h>
#include <ntp_assert.h>
-#include "ntp_malloc.h"
#include <string.h>
+#include "ntp_malloc.h"
+#include "l_stdlib.h"
-#ifndef HAVE_STRDUP
+#define STRDUP_EMPTY_UNIT
+#ifndef HAVE_STRDUP
+# undef STRDUP_EMPTY_UNIT
char *strdup(const char *s);
-
char *
strdup(
const char *s
@@ -24,6 +26,30 @@ strdup(
return cp;
}
-#else
+#endif
+
+#ifndef HAVE_MEMCHR
+# undef STRDUP_EMPTY_UNIT
+void *memchr(const void *s, int c, size_t n)
+{
+ const unsigned char *p = s;
+ while (n && *p != c) {
+ --n;
+ ++p;
+ }
+ return n ? (char*)p : NULL;
+}
+#endif
+
+#ifndef HAVE_STRNLEN
+# undef STRDUP_EMPTY_UNIT
+size_t strnlen(const char *s, size_t n)
+{
+ const char *e = memchr(s, 0, n);
+ return e ? (size_t)(e - s) : n;
+}
+#endif
+
+#ifdef STRDUP_EMPTY_UNIT
int strdup_c_nonempty_compilation_unit;
#endif