From: Vladimir Marek <vlmarek(a)volny.cz>
Solaris 10 FCS (first release) does not have strndup implementation.
Signed-off-by: Vladimir Marek <vlmarek(a)volny.cz>
---
configure.ac | 2 +-
strndup.c | 23 +++++++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
create mode 100644 strndup.c
diff --git a/configure.ac b/configure.ac
index a92e81c..5d20cd9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -371,7 +371,7 @@ AC_CHECK_TYPE(ssize_t, int)
AC_CHECK_FUNCS(fgetpos memmove setegid srand48 strerror)
-AC_REPLACE_FUNCS([setenv strcasecmp strdup strsep strtok_r wcscasecmp])
+AC_REPLACE_FUNCS([setenv strcasecmp strdup strsep strtok_r wcscasecmp strndup])
AC_REPLACE_FUNCS([strcasestr mkdtemp])
AC_CHECK_FUNC(getopt)
diff --git a/strndup.c b/strndup.c
new file mode 100644
index 0000000..81557ba
--- /dev/null
+++ b/strndup.c
@@ -0,0 +1,23 @@
+/* Solaris 10 FCS does not have strndup */
+
+#include <string.h>
+#include <stdlib.h>
+
+char *
+strndup(const char *s, size_t n)
+{
+ size_t len;
+ char *ret;
+
+ if (!s)
+ return (char *)NULL;
+
+ len = strlen(s);
+ if (n < len)
+ len = n;
+
+ ret = malloc(len + 1); /* To store '\0' */
+ memcpy(ret, s, len);
+ ret[len] = '\0';
+ return ret;
+}
--
1.7.9.2