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;
}
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);
}
+#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;
}
va_start(ap, format);
debug_write(fd, call_count == 1, format, ap);
va_end(ap);
+
+ errno = saved_errno;
}
+#endif
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;
}
/* 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;
}
va_start(ap, format);
debug_write(fd, call_count == 1, format, ap);
va_end(ap);
+
+ errno = saved_errno;
}
#endif