Added xstrndup (similar to strndup)
[yaz-moved-to-github.git] / src / xmalloc.c
index d5d6dad..4aa922c 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2008 Index Data
+ * Copyright (C) 1995-2009 Index Data
  * See the file LICENSE for details.
  */
 /**
@@ -341,9 +341,24 @@ void xfree_f(void *p, const char *file, int line)
         yaz_log (log_level, "%s:%d: xfree %p", file, line, p);
     xfree_d(p, file, line);
 }
+
+char *xstrndup_f(const char *s, size_t n, const char *file, int line)
+{
+    size_t l = strlen(s);
+    if (l < n)
+        return xstrdup_f(s, file, line);
+    {
+        char *a = xmalloc_f(n+1, file, line);
+        memcpy(a, s, n);
+        a[n] = '\0';
+        return a;
+    } 
+}
+
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab