]> granicus.if.org Git - strace/commitdiff
Introduce xstrndup function
authorMasatake YAMATO <yamato@redhat.com>
Tue, 13 Jun 2017 08:26:42 +0000 (17:26 +0900)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 19 Jun 2017 21:45:58 +0000 (21:45 +0000)
* configure.ac (AC_CHECK_FUNCS): Add strndup.
* defs.h (xstrndup): New prototype.
* xmalloc.c (xstrndup): New function.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
configure.ac
defs.h
xmalloc.c

index b4cf4cb2b491acd260205e736029ac849da8f0ec..d510f41ecdd1dc16cd2d535f234e15f4a2e442c9 100644 (file)
@@ -283,6 +283,7 @@ AC_CHECK_FUNCS(m4_normalize([
        signalfd
        stpcpy
        strerror
+       strndup
        strsignal
        sync_file_range
        utimensat
diff --git a/defs.h b/defs.h
index 8a28e896636a2a6ded96e5d506f1e7733629af1c..5e054577e796706f8b5d3f3e00fc0d2337ec1cf8 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -401,6 +401,7 @@ void *xcalloc(size_t nmemb, size_t size)
 void *xreallocarray(void *ptr, size_t nmemb, size_t size)
        ATTRIBUTE_ALLOC_SIZE((2, 3));
 char *xstrdup(const char *str) ATTRIBUTE_MALLOC;
+char *xstrndup(const char *str, size_t n) ATTRIBUTE_MALLOC;
 
 extern int read_int_from_file(const char *, int *);
 
index a0176200935ead03ac2f00d69bd96f7234f84584..3ef4856737c3f64ee7418162f4f7f0a88f16f8d3 100644 (file)
--- a/xmalloc.c
+++ b/xmalloc.c
@@ -85,3 +85,24 @@ char *xstrdup(const char *str)
 
        return p;
 }
+
+char *xstrndup(const char *str, size_t n)
+{
+       char *p;
+
+#ifdef HAVE_STRNDUP
+       p = strndup(str, n);
+#else
+       p = xmalloc(n + 1);
+#endif
+
+       if (!p)
+               die_out_of_memory();
+
+#ifndef HAVE_STRNDUP
+       strncpy(p, str, n);
+       p[n] = '\0';
+#endif
+
+       return p;
+}