]> ruderich.org/simon Gitweb - coloredstderr/coloredstderr.git/blobdiff - src/debug.h
update copyright year
[coloredstderr/coloredstderr.git] / src / debug.h
index dadec826cb2f11bb0196528c1bdcc2db1e50c7bc..b15695d068b18ddac26720cc3d909600232a78a0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Debug functions.
  *
- * Copyright (C) 2013  Simon Ruderich
+ * Copyright (C) 2013-2015  Simon Ruderich
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #ifndef DEBUG_H
 #define DEBUG_H 1
 
-static void debug_write(int fd, int first_call, const char *format, va_list ap) {
+static void debug_write(int fd, int first_call, char const *format, va_list ap) {
     char buffer[1024];
 
     int written = vsnprintf(buffer, sizeof(buffer), format, ap);
+    if (written < 0) {
+        return; /* shouldn't happen */
     /* Overflow. */
-    if ((size_t)written >= sizeof(buffer)) {
+    } else if ((size_t)written >= sizeof(buffer)) {
         written = sizeof(buffer) - 1;
     }
 
@@ -34,20 +36,24 @@ static void debug_write(int fd, int first_call, const char *format, va_list ap)
     DLSYM_FUNCTION(real_close, "close");
 
     if (first_call) {
-        char nl = '\n';
+        char const nl = '\n';
         real_write(fd, &nl, 1);
     }
     real_write(fd, buffer, (size_t)written);
     real_close(fd);
 }
 
-static void debug(const char *format, ...) {
+#ifdef DEBUG
+static void debug(char const *format, ...) {
     va_list ap;
 
+    int saved_errno = errno;
+
     /* If the file doesn't exist, do nothing. Prevents writing log files in
      * unexpected places. The user must create the file manually. */
     int fd = open(DEBUG_FILE, O_WRONLY | O_APPEND);
     if (fd == -1) {
+        errno = saved_errno;
         return;
     }
 
@@ -57,13 +63,19 @@ static void debug(const char *format, ...) {
     va_start(ap, format);
     debug_write(fd, call_count == 1, format, ap);
     va_end(ap);
+
+    errno = saved_errno;
 }
+#endif
 
-static void warning(const char *format, ...) {
+static void warning(char const *format, ...) {
     va_list ap;
 
-    char *home = getenv("HOME");
+    int saved_errno = errno;
+
+    char const *home = getenv("HOME");
     if (!home) {
+        errno = saved_errno;
         return;
     }
 
@@ -75,6 +87,7 @@ static void warning(const char *format, ...) {
     /* Create the warning file if it doesn't exist yet. */
     int fd = open(path, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR);
     if (fd == -1) {
+        errno = saved_errno;
         return;
     }
 
@@ -84,6 +97,8 @@ static void warning(const char *format, ...) {
     va_start(ap, format);
     debug_write(fd, call_count == 1, format, ap);
     va_end(ap);
+
+    errno = saved_errno;
 }
 
 #endif