+
+char *xstrdup(const char *s)
+{
+ char *p;
+ p = (char *) xmalloc(strlen(s)+1);
+ strcpy(p,s);
+ return p;
+}
+
+#if !defined(HAVE_STRDUP)
+char *strdup(const char *s)
+{
+ char *p;
+ p = (char *) malloc(strlen(s)+1);
+ if (p)
+ strcpy(p,s);
+ return p;
+}
+#endif /* !HAVE_STRDUP */
+
+char *xstrndup(const char *s, size_t len)
+{
+ char *p;
+ size_t l = strlen(s);
+
+ if (len < l) l = len;
+ p = (char *)xmalloc(l + 1);
+ memcpy(p, s, l);
+ p[l] = '\0';
+ return p;
+}
+
+/* xmalloc.c ends here */