Port: Add compat for strnlen and strndup
authorMichael Jeanson <mjeanson@efficios.com>
Fri, 9 Oct 2015 16:01:46 +0000 (12:01 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 14 Oct 2015 17:26:59 +0000 (13:26 -0400)
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
configure.ac
formats/ctf/types/string.c
formats/lttng-live/lttng-live-comm.c
include/babeltrace/compat/string.h

index d9fa2119d16556c7c8ac0439eb1f170e17511b65..e7ac7936c2a604cc481ad12c04edf9f717d594e6 100644 (file)
@@ -95,6 +95,7 @@ AC_CHECK_FUNCS([ \
        gettimeofday munmap strtoul ftruncate gethostbyname \
        localtime_r memset mkdir rmdir setenv socket \
        strchr strdup strerror strndup strrchr strtoull tzset \
+       strnlen \
 ])
 
 # Check for MinGW32.
index c6935162d6c823b31315300a454bdf9109862739..a9cff6de28ceb3fe1a33f51c38d1d7546292c599 100644 (file)
@@ -29,7 +29,7 @@
 #include <babeltrace/babeltrace-internal.h>
 #include <babeltrace/ctf/types.h>
 #include <babeltrace/compat/limits.h>  /* C99 limits */
-#include <string.h>
+#include <babeltrace/compat/string.h>
 
 int ctf_string_read(struct bt_stream_pos *ppos, struct bt_definition *definition)
 {
@@ -53,7 +53,7 @@ int ctf_string_read(struct bt_stream_pos *ppos, struct bt_definition *definition
        if (max_len_bits < 0)
                return -EFAULT;
        /* Add \0, counting in bytes. */
-       len = strnlen(srcaddr, (size_t) max_len_bits / CHAR_BIT) + 1;
+       len = bt_strnlen(srcaddr, (size_t) max_len_bits / CHAR_BIT) + 1;
        /* Truncated string, unexpected. Trace probably corrupted. */
        if (srcaddr[len - 1] != '\0')
                return -EFAULT;
index 6cad4ab56bcade3c4ddc6be9ce11e0822c802522..b87e2f9d159f263b71ca8c9f5081a14d859487df 100644 (file)
@@ -26,7 +26,6 @@
 #include <netinet/in.h>
 #include <netdb.h>
 #include <stdio.h>
-#include <string.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <errno.h>
@@ -53,6 +52,7 @@
 #include <babeltrace/endian.h>
 #include <babeltrace/compat/memstream.h>
 #include <babeltrace/compat/send.h>
+#include <babeltrace/compat/string.h>
 
 #include "lttng-live.h"
 #include "lttng-viewer-abi.h"
@@ -278,8 +278,8 @@ void update_session_list(GPtrArray *session_list, char *hostname,
                return;
 
        relay_session = g_new0(struct lttng_live_relay_session, 1);
-       relay_session->hostname = strndup(hostname, MAXNAMLEN);
-       relay_session->name = strndup(session_name, MAXNAMLEN);
+       relay_session->hostname = bt_strndup(hostname, MAXNAMLEN);
+       relay_session->name = bt_strndup(session_name, MAXNAMLEN);
        relay_session->clients = clients;
        relay_session->streams = streams;
        relay_session->timer = timer;
index 5d6a0632d5b3ef67e6db510eb99e3ae9ab161bb0..7a574e679d207f4a03549e9f2ddce1751c2ae210 100644 (file)
@@ -24,6 +24,7 @@
  */
 
 #include <string.h>
+#include <stdlib.h>
 
 #if !defined(__linux__) || ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !defined(_GNU_SOURCE))
 
@@ -51,4 +52,65 @@ int compat_strerror_r(int errnum, char *buf, size_t buflen)
 
 #endif
 
+#ifdef HAVE_STRNLEN
+static inline
+size_t bt_strnlen(const char *str, size_t max)
+{
+       return strnlen(str, max);
+}
+#else
+static inline
+size_t bt_strnlen(const char *str, size_t max)
+{
+       size_t ret;
+       const char *end;
+
+       end = memchr(str, 0, max);
+
+       if (end) {
+               ret = (size_t) (end - str);
+       } else {
+               ret = max;
+       }
+
+       return ret;
+}
+#endif /* HAVE_STRNLEN */
+
+#ifdef HAVE_STRNDUP
+static inline
+char *bt_strndup(const char *s, size_t n)
+{
+       return strndup(s, n);
+}
+#else
+static inline
+char *bt_strndup(const char *s, size_t n)
+{
+       char *ret;
+       size_t navail;
+
+       if (!s) {
+               ret = NULL;
+               goto end;
+       }
+
+       /* min() */
+       navail = strlen(s) + 1;
+       if ((n + 1) < navail) {
+               navail = n + 1;
+       }
+
+       ret = malloc(navail);
+       if (!ret) {
+               goto end;
+       }
+
+       memcpy(ret, s, navail);
+       ret[navail - 1] = '\0';
+end:
+       return ret;
+}
+#endif /* HAVE_STRNDUP */
+
 #endif /* _BABELTRACE_COMPAT_STRING_H */
This page took 0.027789 seconds and 4 git commands to generate.