From: Randy Dunlap <[EMAIL PROTECTED]>

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 remember the errno and print the message by using
strerror() instead.

Builds cleanly on x86_32 and x86_64.

Signed-off-by: Randy Dunlap <[EMAIL PROTECTED]>
---
 text-utils/tailf.c |   22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

--- util-linux-ng-2.13.orig/text-utils/tailf.c
+++ util-linux-ng-2.13/text-utils/tailf.c
@@ -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,9 @@ static void tailf(const char *filename, 
     int  i;
 
     if (!(str = fopen(filename, "r"))) {
+       int err = errno;
        fprintf(stderr, _("Cannot open \"%s\" for read\n"), filename);
-       perror("");
+       fprintf(stderr, _("fopen returned %d: %s\n"), err, strerror(err));
        exit(1);
     }
 
@@ -83,7 +86,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 +105,22 @@ int main(int argc, char **argv)
        nsize = filesize(filename);
        if (nsize != osize) {
            if (!(str = fopen(filename, "r"))) {
+               int err = errno;
                fprintf(stderr, _("Cannot open \"%s\" for read\n"), filename);
-               perror(argv[0]);
+               fprintf(stderr, _("%s: fopen returned %d: %s\n"),
+                       argv[0], err, strerror(err));
                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\"\n"),
+                               filename);
+                       fprintf (stderr, _("%s: fwrite returned %d, expected 
%d\n"),
+                               argv[0], wcount, count);
+                    }
+               }
            fflush(stdout);
            fclose(str);
            osize = nsize;
-
To unsubscribe from this list: send the line "unsubscribe util-linux-ng" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to