Make vlog preserve errno.
authorBen Pfaff <blp@nicira.com>
Thu, 27 Mar 2008 21:28:01 +0000 (14:28 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 28 Mar 2008 00:50:33 +0000 (17:50 -0700)
This means that adding logging to code disturbs the program's state
as little as possible.  This is a precautionary measure, not in response
to any particular bug.

include/vlog.h
lib/vlog.c

index 93f13a1476fe53b715ca2cbba8c23f8d73de6913..b324c4f5a9a0e6d75e13cedede4c0ee4600efcb2 100644 (file)
@@ -92,6 +92,7 @@ void vlog(enum vlog_module, enum vlog_level, const char *format, ...)
  * expands to the module used by the current source file, e.g.
  *      #include "vlog.h"
  *      #define THIS_MODULE VLM_NETLINK
+ * Guaranteed to preserve errno.
  */
 #define VLOG_EMER(...) vlog(THIS_MODULE, VLL_EMER, __VA_ARGS__)
 #define VLOG_ERR(...) vlog(THIS_MODULE, VLL_ERR, __VA_ARGS__)
index 66d57101417a1a40768e916c6f7dea34cea8bcc3..c23b67a766d522f186d8f5ac8f74bb739fef0097 100644 (file)
@@ -266,13 +266,16 @@ vlog_get_levels(void)
 }
 
 /* Writes 'message' to the log at the given 'level' and as coming from the
- * given 'module'. */
+ * given 'module'.
+ *
+ * Guaranteed to preserve errno. */
 void
 vlog(enum vlog_module module, enum vlog_level level, const char *message, ...)
 {
     bool log_console = levels[module][VLF_CONSOLE] >= level;
     bool log_syslog = levels[module][VLF_SYSLOG] >= level;
     if (log_console || log_syslog) {
+        int save_errno = errno;
         static int msg_num;
         const char *module_name = vlog_get_module_name(module);
         const char *level_name = vlog_get_level_name(level);
@@ -305,5 +308,6 @@ vlog(enum vlog_module module, enum vlog_level level, const char *message, ...)
 
             syslog(syslog_levels[level], "%s", s);
         }
+        errno = save_errno;
     }
 }