chiark / gitweb /
util: add a bit of syntactic sugar for saving/restoring errno
[elogind.git] / src / shared / log.c
index ff2dd453509a2b813c942c6208211dea026887d6..0dd04bc51e65e73519cbaee52ddff58e6e415fdf 100644 (file)
@@ -541,11 +541,11 @@ static int log_dispatch(
 
                         k = write_to_journal(level, file, line, func,
                                              object_name, object, buffer);
-                        if (k <= 0) {
-                                if (k < 0 && k != -EAGAIN)
+                        if (k < 0) {
+                                if (k != -EAGAIN)
                                         log_close_journal();
                                 log_open_kmsg();
-                        } else
+                        } else if (k > 0)
                                 r++;
                 }
 
@@ -554,11 +554,11 @@ static int log_dispatch(
 
                         k = write_to_syslog(level, file, line, func,
                                             object_name, object, buffer);
-                        if (k <= 0) {
-                                if (k < 0 && k != -EAGAIN)
+                        if (k < 0) {
+                                if (k != -EAGAIN)
                                         log_close_syslog();
                                 log_open_kmsg();
-                        } else
+                        } else if (k > 0)
                                 r++;
                 }
 
@@ -571,11 +571,10 @@ static int log_dispatch(
 
                         k = write_to_kmsg(level, file, line, func,
                                           object_name, object, buffer);
-                        if (k <= 0) {
-                                if (k < 0 && k != -EAGAIN)
-                                        log_close_kmsg();
+                        if (k < 0) {
+                                log_close_kmsg();
                                 log_open_console();
-                        } else
+                        } else if (k > 0)
                                 r++;
                 }
 
@@ -599,18 +598,14 @@ int log_dump_internal(
         const char *func,
         char *buffer) {
 
-        int saved_errno, r;
+        PROTECT_ERRNO;
 
         /* This modifies the buffer... */
 
         if (_likely_(LOG_PRI(level) > log_max_level))
                 return 0;
 
-        saved_errno = errno;
-        r = log_dispatch(level, file, line, func, NULL, NULL, buffer);
-        errno = saved_errno;
-
-        return r;
+        return log_dispatch(level, file, line, func, NULL, NULL, buffer);
 }
 
 int log_metav(
@@ -621,20 +616,16 @@ int log_metav(
         const char *format,
         va_list ap) {
 
+        PROTECT_ERRNO;
         char buffer[LINE_MAX];
-        int saved_errno, r;
 
         if (_likely_(LOG_PRI(level) > log_max_level))
                 return 0;
 
-        saved_errno = errno;
         vsnprintf(buffer, sizeof(buffer), format, ap);
         char_array_0(buffer);
 
-        r = log_dispatch(level, file, line, func, NULL, NULL, buffer);
-        errno = saved_errno;
-
-        return r;
+        return log_dispatch(level, file, line, func, NULL, NULL, buffer);
 }
 
 int log_meta(
@@ -664,21 +655,17 @@ int log_metav_object(
         const char *format,
         va_list ap) {
 
+        PROTECT_ERRNO;
         char buffer[LINE_MAX];
-        int saved_errno, r;
 
         if (_likely_(LOG_PRI(level) > log_max_level))
                 return 0;
 
-        saved_errno = errno;
         vsnprintf(buffer, sizeof(buffer), format, ap);
         char_array_0(buffer);
 
-        r = log_dispatch(level, file, line, func,
-                         object_name, object, buffer);
-        errno = saved_errno;
-
-        return r;
+        return log_dispatch(level, file, line, func,
+                            object_name, object, buffer);
 }
 
 int log_meta_object(
@@ -736,7 +723,7 @@ int log_struct_internal(
                 const char *func,
                 const char *format, ...) {
 
-        int saved_errno;
+        PROTECT_ERRNO;
         va_list ap;
         int r;
 
@@ -749,8 +736,6 @@ int log_struct_internal(
         if ((level & LOG_FACMASK) == 0)
                 level = log_facility | LOG_PRI(level);
 
-        saved_errno = errno;
-
         if ((log_target == LOG_TARGET_AUTO ||
              log_target == LOG_TARGET_JOURNAL_OR_KMSG ||
              log_target == LOG_TARGET_JOURNAL) &&
@@ -844,7 +829,6 @@ int log_struct_internal(
                         r = -EINVAL;
         }
 
-        errno = saved_errno;
         return r;
 }