[lxc-devel] [lxc/master] log: add strerror_r macro

2xsec on Github lxc-bot at linuxcontainers.org
Mon Jun 25 13:05:39 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 539 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180625/071aef48/attachment.bin>
-------------- next part --------------
From 6f2c37f07300ec428ae90a33c55820e1b0b8bfcf Mon Sep 17 00:00:00 2001
From: 2xsec <dh48.jeong at samsung.com>
Date: Mon, 25 Jun 2018 22:00:43 +0900
Subject: [PATCH] log: add strerror_r macro

Signed-off-by: 2xsec <dh48.jeong at samsung.com>
---
 src/lxc/log.h          | 52 ++++++++++++++++++++++++++++++++++++++++++++++++--
 src/lxc/lsm/apparmor.c |  1 +
 src/lxc/lsm/lsm.c      |  1 +
 src/lxc/lsm/selinux.c  |  1 +
 src/lxc/monitor.c      |  1 +
 src/lxc/state.c        |  1 +
 src/lxc/sync.c         |  1 +
 src/lxc/terminal.c     |  1 +
 8 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/src/lxc/log.h b/src/lxc/log.h
index 960209777..a39cea7b8 100644
--- a/src/lxc/log.h
+++ b/src/lxc/log.h
@@ -292,6 +292,28 @@ ATTR_UNUSED static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo,	\
 #define lxc_log_category_priority(name) 				\
 	(lxc_log_priority_to_string(lxc_log_category_##name.priority))
 
+/*
+ * Helper macro to define errno string.
+ */
+#if (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !defined(_GNU_SOURCE)
+#define lxc_log_strerror_define								\
+	char errno_buf[1024] = {0};								\
+	char* ptr = errno_buf;									\
+															\
+	if (strerror_r(errno, errno_buf, sizeof(errno_buf))) 	\
+		strncpy(errno_buf, "Failed to get errno string.", sizeof(errno_buf));
+#else
+#define lxc_log_strerror_define								\
+	char errno_buf[1024] = {0};								\
+	char* ptr;												\
+															\
+	ptr = strerror_r(errno, errno_buf, sizeof(errno_buf));	\
+	if (!ptr) {												\
+		strncpy(errno_buf, "Failed to get errno string.", sizeof(errno_buf));	\
+		ptr = errno_buf;									\
+	}
+#endif
+
 /*
  * top categories
  */
@@ -342,8 +364,34 @@ ATTR_UNUSED static inline void LXC_##LEVEL(struct lxc_log_locinfo* locinfo,	\
 
 
 
-#define SYSERROR(format, ...) do {				    	\
-	ERROR("%s - " format, strerror(errno), ##__VA_ARGS__);		\
+#define SYSTRACE(format, ...) do {						\
+	lxc_log_strerror_define								\
+	TRACE("%s - " format, ptr, ##__VA_ARGS__);			\
+} while (0)
+
+#define SYSDEBUG(format, ...) do {						\
+	lxc_log_strerror_define								\
+	DEBUG("%s - " format, ptr, ##__VA_ARGS__);			\
+} while (0)
+
+#define SYSINFO(format, ...) do {						\
+	lxc_log_strerror_define								\
+	INFO("%s - " format, ptr, ##__VA_ARGS__);			\
+} while (0)
+
+#define SYSNOTICE(format, ...) do {						\
+	lxc_log_strerror_define								\
+	NOTICE("%s - " format, ptr, ##__VA_ARGS__);			\
+} while (0)
+
+#define SYSWARN(format, ...) do {						\
+	lxc_log_strerror_define								\
+	WARN("%s - " format, ptr, ##__VA_ARGS__);			\
+} while (0)
+
+#define SYSERROR(format, ...) do {						\
+	lxc_log_strerror_define								\
+	ERROR("%s - " format, ptr, ##__VA_ARGS__);			\
 } while (0)
 
 extern int lxc_log_fd;
diff --git a/src/lxc/lsm/apparmor.c b/src/lxc/lsm/apparmor.c
index ec4168847..793d13f76 100644
--- a/src/lxc/lsm/apparmor.c
+++ b/src/lxc/lsm/apparmor.c
@@ -18,6 +18,7 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
diff --git a/src/lxc/lsm/lsm.c b/src/lxc/lsm/lsm.c
index 5186fe902..e404002d6 100644
--- a/src/lxc/lsm/lsm.c
+++ b/src/lxc/lsm/lsm.c
@@ -21,6 +21,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#define _GNU_SOURCE
 #include <errno.h>
 #include <stdlib.h>
 #include <unistd.h>
diff --git a/src/lxc/lsm/selinux.c b/src/lxc/lsm/selinux.c
index bd6541cfa..1d8ce4cba 100644
--- a/src/lxc/lsm/selinux.c
+++ b/src/lxc/lsm/selinux.c
@@ -21,6 +21,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#define _GNU_SOURCE
 #include <errno.h>
 #include <stdlib.h>
 #include <stdbool.h>
diff --git a/src/lxc/monitor.c b/src/lxc/monitor.c
index ebf2122c0..ed223a5b2 100644
--- a/src/lxc/monitor.c
+++ b/src/lxc/monitor.c
@@ -22,6 +22,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#define _GNU_SOURCE
 #include <errno.h>
 #include <fcntl.h>
 #include <inttypes.h>
diff --git a/src/lxc/state.c b/src/lxc/state.c
index 06aa3208a..12fd65386 100644
--- a/src/lxc/state.c
+++ b/src/lxc/state.c
@@ -21,6 +21,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#define _GNU_SOURCE
 #include <errno.h>
 #include <fcntl.h>
 #include <stdio.h>
diff --git a/src/lxc/sync.c b/src/lxc/sync.c
index 9c20c1d69..adc6fb2c3 100644
--- a/src/lxc/sync.c
+++ b/src/lxc/sync.c
@@ -21,6 +21,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#define _GNU_SOURCE
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <unistd.h>
diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c
index eb745c5ff..e1089acf3 100644
--- a/src/lxc/terminal.c
+++ b/src/lxc/terminal.c
@@ -21,6 +21,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#define _GNU_SOURCE
 #include <errno.h>
 #include <fcntl.h>
 #include <lxc/lxccontainer.h>


More information about the lxc-devel mailing list