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