syslogd: syslogd: don't *decrement* log_file->size on write failures
authorJoshua Judson Rosen <jrosen@harvestai.com>
Wed, 2 Jul 2014 17:41:41 +0000 (19:41 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 2 Jul 2014 17:41:41 +0000 (19:41 +0200)
Even if we fail to write to a log-file, and it's not growing,
it's not *shrinking* either....

Signed-off-by: Joshua Judson Rosen <jrosen@harvestai.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
sysklogd/syslogd.c

index d80447bd73ee669a108b894f47db7b33bb0c19da..04221fc339ab4a452a64d8c91e7ef79100bb1e30 100644 (file)
@@ -569,7 +569,7 @@ static void log_to_kmsg(int pri, const char *msg)
         */
        pri &= G.primask;
 
-       write(G.kmsgfd, G.printbuf, sprintf(G.printbuf, "<%d>%s\n", pri, msg));
+       full_write(G.kmsgfd, G.printbuf, sprintf(G.printbuf, "<%d>%s\n", pri, msg));
 }
 #else
 static void kmsg_init(void) {}
@@ -678,9 +678,14 @@ static void log_locally(time_t now, char *msg, logFile_t *log_file)
                close(log_file->fd);
                goto reopen;
        }
-       log_file->size +=
+/* TODO: what to do on write errors ("disk full")? */
+       len = full_write(log_file->fd, msg, len);
+       if (len > 0)
+               log_file->size += len;
+#else
+       full_write(log_file->fd, msg, len);
 #endif
-                       full_write(log_file->fd, msg, len);
+
 #ifdef SYSLOGD_WRLOCK
        fl.l_type = F_UNLCK;
        fcntl(log_file->fd, F_SETLKW, &fl);