X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Fdebug.h;h=911a440fb0f83feb30c039351cd2216a81958c28;hb=1068648718dad86471451266fcdf4248bb79f3fe;hp=dadec826cb2f11bb0196528c1bdcc2db1e50c7bc;hpb=7337375e052aa1eeebc681c7c5b78aa242329339;p=coloredstderr%2Fcoloredstderr.git diff --git a/src/debug.h b/src/debug.h index dadec82..911a440 100644 --- a/src/debug.h +++ b/src/debug.h @@ -20,12 +20,14 @@ #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