chiark / gitweb /
log: allow negative errno values
authorLennart Poettering <lennart@poettering.net>
Fri, 28 Nov 2014 01:12:30 +0000 (02:12 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 28 Nov 2014 01:18:46 +0000 (02:18 +0100)
sd_bus_error_set_errno() allows negative errors too, hence, be equally
nice.

src/shared/log.c
src/shared/log.h

index dcbcd9d9c9feac6c8561bd6457ebadd6c5e4c9a8..56469b32b5d44dfe69e822921130cbe2c8c7163b 100644 (file)
@@ -545,6 +545,9 @@ static int log_dispatch(
         if ((level & LOG_FACMASK) == 0)
                 level = log_facility | LOG_PRI(level);
 
+        if (error < 0)
+                error = -error;
+
         do {
                 char *e;
                 int k = 0;
@@ -644,7 +647,7 @@ int log_internalv(
 
         /* Make sure that %m maps to the specified error */
         if (error != 0)
-                errno = error;
+                errno = abs(error);
 
         vsnprintf(buffer, sizeof(buffer), format, ap);
         char_array_0(buffer);
@@ -689,7 +692,7 @@ int log_object_internalv(
 
         /* Make sure that %m maps to the specified error */
         if (error != 0)
-                errno = error;
+                errno = abs(error);
 
         vsnprintf(buffer, sizeof(buffer), format, ap);
         char_array_0(buffer);
@@ -781,6 +784,9 @@ int log_struct_internal(
         if ((level & LOG_FACMASK) == 0)
                 level = log_facility | LOG_PRI(level);
 
+        if (error < 0)
+                error = -error;
+
         if ((log_target == LOG_TARGET_AUTO ||
              log_target == LOG_TARGET_JOURNAL_OR_KMSG ||
              log_target == LOG_TARGET_JOURNAL) &&
index 3a4d1134a15d83b5aaedac37609941c0fb4127db..3180dfd638c7c02430570e03bbf0c3bf6ee0f7c8 100644 (file)
@@ -202,7 +202,7 @@ LogTarget log_target_from_string(const char *s) _pure_;
 /* Helpers to prepare various fields for structured logging */
 #define LOG_MESSAGE(fmt, ...) "MESSAGE=" fmt, ##__VA_ARGS__
 #define LOG_MESSAGE_ID(x) "MESSAGE_ID=" SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(x)
-#define LOG_ERRNO(error) "ERRNO=%i", error
+#define LOG_ERRNO(error) "ERRNO=%i", abs(error)
 
 void log_received_signal(int level, const struct signalfd_siginfo *si);