]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
log: handle strerror_r() versions
authorChristian Brauner <christian.brauner@ubuntu.com>
Wed, 22 Aug 2018 10:25:16 +0000 (12:25 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Wed, 22 Aug 2018 11:41:41 +0000 (13:41 +0200)
Closes #2563.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
configure.ac
src/lxc/log.h

index 19d9ea220a0fb672608236a26d3b9941091e0689..ed8bbc82f5ea23358d04d951bd9fbbdc1c5f8a4b 100644 (file)
@@ -619,6 +619,12 @@ AC_HEADER_MAJOR
 # Check for some syscalls functions
 AC_CHECK_FUNCS([setns pivot_root sethostname unshare rand_r confstr faccessat gettid memfd_create])
 
+# Check for strerror_r() support. Defines:
+# - HAVE_STRERROR_R if available
+# - HAVE_DECL_STRERROR_R if defined
+# - STRERROR_R_CHAR_P if it returns char *
+AC_FUNC_STRERROR_R
+
 # Check for some functions
 AC_CHECK_LIB(pthread, main)
 AC_CHECK_FUNCS(statvfs)
index 4654fd918730bae37367fd30f7099730c25a80c5..b14ab1ce5705b3d51ba7869d1d4a6f67d232dc98 100644 (file)
@@ -327,22 +327,38 @@ ATTR_UNUSED static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo,       \
 /*
  * Helper macro to define errno string.
  */
-#if (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !defined(_GNU_SOURCE) || IS_BIONIC
-#define lxc_log_strerror_r                                               \
-       char errno_buf[MAXPATHLEN / 2] = {"Failed to get errno string"}; \
-       char *ptr = errno_buf;                                           \
-       {                                                                \
-               (void)strerror_r(errno, errno_buf, sizeof(errno_buf));   \
-       }
+#if HAVE_STRERROR_R
+       #ifndef HAVE_DECL_STRERROR_R
+               #ifdef STRERROR_R_CHAR_P
+                       char *strerror_r(int errnum, char *buf, size_t buflen);
+               #else
+                       int strerror_r(int errnum, char *buf, size_t buflen);
+               #endif
+       #endif
+
+       #ifdef STRERROR_R_CHAR_P
+               #define lxc_log_strerror_r                                               \
+                       char errno_buf[MAXPATHLEN / 2] = {"Failed to get errno string"}; \
+                       char *ptr = NULL;                                                \
+                       {                                                                \
+                               ptr = strerror_r(errno, errno_buf, sizeof(errno_buf));   \
+                               if (!ptr)                                                \
+                                       ptr = errno_buf;                                 \
+                       }
+       #else
+               #define lxc_log_strerror_r                                               \
+                       char errno_buf[MAXPATHLEN / 2] = {"Failed to get errno string"}; \
+                       char *ptr = errno_buf;                                           \
+                       {                                                                \
+                               (void)strerror_r(errno, errno_buf, sizeof(errno_buf));   \
+                       }
+       #endif
 #else
-#define lxc_log_strerror_r                                               \
-       char errno_buf[MAXPATHLEN / 2] = {"Failed to get errno string"}; \
-       char *ptr;                                                       \
-       {                                                                \
-               ptr = strerror_r(errno, errno_buf, sizeof(errno_buf));   \
-               if (!ptr)                                                \
-                       ptr = errno_buf;                                 \
-       }
+       #define lxc_log_strerror_r             \
+               char *ptr = NULL;              \
+               {                              \
+                       ptr = strerror(errno); \
+               }
 #endif
 
 /*