]> err.no Git - util-linux/commitdiff
tailf: clean up gcc warnings & fix use of errno
authorKarel Zak <kzak@redhat.com>
Wed, 3 Oct 2007 21:15:03 +0000 (14:15 -0700)
committerKarel Zak <kzak@redhat.com>
Thu, 11 Oct 2007 11:19:55 +0000 (13:19 +0200)
Fix strict gcc warnings in tailf that come from using:
  ("-Wall -Wp,-D_FORTIFY_SOURCE=2")

tailf.c:111: warning: ignoring return value of 'fwrite', declared with attribute warn_unused_result

Also, tailf uses perror() for error reporting, but it inserts
an fprintf call first, so perror() is actually reporting the
result of the fprintf() call, not the failing call; change
the code to print the message by using strerror() instead.

Builds cleanly on x86_32 and x86_64.

Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
text-utils/tailf.c

index e10243f98abecc0b7b60d74e29e64c9800a9e82d..5b1d1a4ec3c9e4a9c55cbd68555e5c75589b7272 100644 (file)
@@ -30,6 +30,8 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <malloc.h>
+#include <errno.h>
+#include <string.h>
 #include <sys/stat.h>
 #include "nls.h"
 
@@ -50,8 +52,8 @@ static void tailf(const char *filename, int lines)
     int  i;
 
     if (!(str = fopen(filename, "r"))) {
-       fprintf(stderr, _("Cannot open \"%s\" for read\n"), filename);
-       perror("");
+       fprintf(stderr, _("Cannot open \"%s\" for read: %s\n"),
+                       filename, strerror(errno));
        exit(1);
     }
 
@@ -83,7 +85,7 @@ int main(int argc, char **argv)
     size_t     osize, nsize;
     FILE       *str;
     const char *filename;
-    int        count;
+    int        count, wcount;
 
     setlocale(LC_ALL, "");
     bindtextdomain(PACKAGE, LOCALEDIR);
@@ -102,13 +104,17 @@ int main(int argc, char **argv)
        nsize = filesize(filename);
        if (nsize != osize) {
            if (!(str = fopen(filename, "r"))) {
-               fprintf(stderr, _("Cannot open \"%s\" for read\n"), filename);
-               perror(argv[0]);
+               fprintf(stderr, _("Cannot open \"%s\" for read: %s\n"),
+                               filename, strerror(errno));
                exit(1);
            }
            if (!fseek(str, osize, SEEK_SET))
-                while ((count = fread(buffer, 1, sizeof(buffer), str)) > 0)
-                    fwrite(buffer, 1, count, stdout);
+                while ((count = fread(buffer, 1, sizeof(buffer), str)) > 0) {
+                    wcount = fwrite(buffer, 1, count, stdout);
+                    if (wcount != count)
+                       fprintf (stderr, _("Incomplete write to \"%s\" (written %d, expected %d)\n"),
+                               filename, wcount, count);
+               }
            fflush(stdout);
            fclose(str);
            osize = nsize;