* defs.h (xstrndup): New prototype.
* xmalloc.c (xstrndup): New function.
* configure.ac (AC_CHECK_FUNC): check the avaiabllity of strndup.

Changes in version 4 (suggested by ldv):

        * Use strndup if available.
        * Fix a typo in log.

Signed-off-by: Masatake YAMATO <yam...@redhat.com>
---
 configure.ac |  1 +
 defs.h       |  1 +
 xmalloc.c    | 21 +++++++++++++++++++++
 3 files changed, 23 insertions(+)

diff --git a/configure.ac b/configure.ac
index b4cf4cb..9bf89fc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -282,6 +282,7 @@ AC_CHECK_FUNCS(m4_normalize([
        readahead
        signalfd
        stpcpy
+       strndup
        strerror
        strsignal
        sync_file_range
diff --git a/defs.h b/defs.h
index 8a28e89..5e05457 100644
--- 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 *);
 
diff --git a/xmalloc.c b/xmalloc.c
index a017620..3ef4856 100644
--- 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;
+}
-- 
2.9.4


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to