--- src/malloc.c.orig	2008-08-20 13:22:07.000000000 -0400
+++ src/malloc.c	2008-08-20 13:22:31.000000000 -0400
@@ -58,3 +58,29 @@ char *ca_sprintf_malloc(const char *form
             size *= 2;
     }
 }
+
+#ifndef HAVE_STRNDUP
+char *ca_strndup (const char *s, size_t n) {
+    size_t n_avail;
+    char *p;
+
+    if (!s) {
+        return NULL;
+    }
+
+    if (memchr (s, '\0', n) != NULL) {
+        n_avail = strlen (s);
+        if (n_avail > n)
+            n_avail = n;
+    } else {
+        n_avail = n;
+    }
+    p = ca_malloc (n_avail + 1);
+    if (p == NULL)
+        return NULL;
+    memcpy (p, s, n_avail);
+    p[n_avail] = '\0';
+
+    return p;
+}
+#endif