Commit f3da121c authored by Russ Allbery's avatar Russ Allbery

Add portable replacement for strndup

We're now using this again, now that we're using the vector
library for the ad_instances configuration, so add a replacement
for Mac OS X.
parent 725a436c
......@@ -66,7 +66,7 @@ AC_CHECK_TYPES([ssize_t], [], [],
[#include <sys/types.h>])
AC_REPLACE_FUNCS([asprintf strndup])
* Replacement for a missing strndup.
* The canonical version of this file is maintained in the rra-c-util package,
* which can be found at <>.
* Written by Russ Allbery <>
* The authors hereby relinquish any claim to any copyright that they may have
* in this work, whether granted under contract or by operation of law or
* international treaty, and hereby commit to the public, at large, that they
* shall not, at any time in the future, seek to enforce any copyright in this
* work against any person or entity, or prevent any person or entity from
* copying, publishing, distributing or creating derivative works of this
* work.
#include <config.h>
#include <portable/system.h>
#include <errno.h>
* If we're running the test suite, rename the functions to avoid conflicts
* with the system versions.
# undef strndup
# define strndup test_strndup
char *test_strndup(const char *, size_t);
char *
strndup(const char *s, size_t n)
const char *p;
size_t length;
char *copy;
if (s == NULL) {
errno = EINVAL;
return NULL;
/* Don't assume that the source string is nul-terminated. */
for (p = s; (size_t) (p - s) < n && *p != '\0'; p++)
length = p - s;
copy = malloc(length + 1);
if (copy == NULL)
return NULL;
memcpy(copy, s, length);
copy[length] = '\0';
return copy;
......@@ -124,6 +124,9 @@ extern int snprintf(char *, size_t, const char *, ...)
extern int vsnprintf(char *, size_t, const char *, va_list);
extern char *strndup(const char *, size_t);
/* Undo default visibility change. */
#pragma GCC visibility pop
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment