Port: Add compat for strnlen and strndup
authorMichael Jeanson <mjeanson@efficios.com>
Fri, 9 Oct 2015 16:01:46 +0000 (12:01 -0400)
committerMichael Jeanson <mjeanson@efficios.com>
Fri, 16 Oct 2015 19:40:31 +0000 (15:40 -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 971cee55299827d25a72942dd4d2c36a03c1b2ea..0edc2a3c30195bf2f7793500e504c79610d8668b 100644 (file)
@@ -81,7 +81,7 @@ AC_TYPE_SIZE_T
 # Checks for library functions.
 AC_FUNC_MALLOC
 AC_FUNC_MMAP
-AC_CHECK_FUNCS([gettimeofday munmap strtoul])
+AC_CHECK_FUNCS([gettimeofday munmap strtoul strndup strnlen])
 
 # Check for MinGW32.
 MINGW32=no
index 002f1b4fb335f5bb34d776fa79d36b5f9bf83c35..c455f9b2f7758f0bec20924c8232d1dfdc04dec8 100644 (file)
@@ -29,7 +29,7 @@
 #include <babeltrace/babeltrace-internal.h>
 #include <babeltrace/ctf/types.h>
 #include <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 485dabba376cf67351b659edef18726770f6fdb2..d26d83eb4bbb01a9d383585d57fab2761543fb4a 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/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.027717 seconds and 4 git commands to generate.