]> git.proxmox.com Git - mirror_zfs.git/blobdiff - lib/libuutil/uu_alloc.c
Update to onnv_147
[mirror_zfs.git] / lib / libuutil / uu_alloc.c
index 05d8622871fa9199e9e4ae89e4f2fbeb1bc60c60..2bef759d525ece3a5f0a5eb7c41f99e1a3e9e982 100644 (file)
@@ -19,8 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
 #include "libuutil_common.h"
@@ -67,6 +66,44 @@ uu_strdup(const char *str)
        return (buf);
 }
 
+/*
+ * Duplicate up to n bytes of a string.  Kind of sort of like
+ * strdup(strlcpy(s, n)).
+ */
+char *
+uu_strndup(const char *s, size_t n)
+{
+       size_t len;
+       char *p;
+
+       len = strnlen(s, n);
+       p = uu_zalloc(len + 1);
+       if (p == NULL)
+               return (NULL);
+
+       if (len > 0)
+               (void) memcpy(p, s, len);
+       p[len] = '\0';
+
+       return (p);
+}
+
+/*
+ * Duplicate a block of memory.  Combines malloc with memcpy, much as
+ * strdup combines malloc, strlen, and strcpy.
+ */
+void *
+uu_memdup(const void *buf, size_t sz)
+{
+       void *p;
+
+       p = uu_zalloc(sz);
+       if (p == NULL)
+               return (NULL);
+       (void) memcpy(p, buf, sz);
+       return (p);
+}
+
 char *
 uu_msprintf(const char *format, ...)
 {