log: Replace strerror with strerror_r 51/280851/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 5 Sep 2022 09:36:44 +0000 (18:36 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 6 Sep 2022 01:57:03 +0000 (10:57 +0900)
This means to use thread safe API.

Change-Id: I68d157d1107261d3252991ec54ae8f16381fb221

include/libds/log.h
src/log.c

index 5296d89..e588968 100644 (file)
@@ -2,9 +2,9 @@
 #define LIBDS_LOG_H
 
 #include <stdbool.h>
+#include <stdio.h>
 #include <stdarg.h>
 #include <string.h>
-#include <errno.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -33,6 +33,7 @@ enum ds_log_level ds_log_get_level(void);
 
 void _ds_log(enum ds_log_level level, const char *format, ...) _DS_ATTRIB_PRINTF(2, 3);
 void _ds_vlog(enum ds_log_level level, const char *format, va_list args) _DS_ATTRIB_PRINTF(2, 0);
+void ds_log_errno(enum ds_log_level level, const char *fmt, ...);
 
 #define ds_log(level, fmt, ...) \
     _ds_log(level, "[%s:%d] " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
@@ -40,9 +41,6 @@ void _ds_vlog(enum ds_log_level level, const char *format, va_list args) _DS_ATT
 #define ds_vlog(level, fmt, args) \
     _ds_vlog(level, "[%s:%d] " fmt, __FILE__, __LINE__, args)
 
-#define ds_log_errno(level, fmt, ...) \
-    ds_log(level, fmt ": %s", ##__VA_ARGS__, strerror(errno))
-
 #define ds_err(fmt, ...) \
     ds_log(DS_ERR, fmt, ##__VA_ARGS__)
 
index 67386af..cc028f8 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -4,6 +4,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <errno.h>
 
 #include <wayland-server.h>
 
@@ -58,6 +59,21 @@ _ds_log(enum ds_log_level level, const char *fmt, ...)
     va_end(args);
 }
 
+WL_EXPORT void
+ds_log_errno(enum ds_log_level level, const char *fmt, ...)
+{
+    static char ds_fmt[1024];
+    char err_str[256] = {'\0',};
+    va_list args;
+
+    strerror_r(errno, err_str, sizeof(err_str));
+    snprintf(ds_fmt, sizeof(ds_fmt), "%s : %s", fmt, err_str);
+
+    va_start(args, fmt);
+    _ds_vlog(level, ds_fmt, args);
+    va_end(args);
+}
+
 enum ds_log_level
 ds_log_get_level(void)
 {