From: Sami Kerola Date: Sun, 8 Sep 2013 16:09:09 +0000 (+0100) Subject: hexdump: revert global exitval variable change X-Git-Tag: v2.24-rc1~292 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4ccf1137046d3f28bf2f2781a095ecd225294fd8;p=thirdparty%2Futil-linux.git hexdump: revert global exitval variable change The change f2a037fb7b153954d5d34cca48182b6d8832fcfa had unfavorable effect of making hexdump to return non-zero exit value always. This happen because oversight when 'exitval' gets to be set. By clance, one might expect main() to call next() which will return value for 'exitval'. That assessment misses later call chain main() -> display() -> get() -> next(), which in reverse should return correct value for 'exitval'. It was mentioned in util-linux maillist that Ondrej Oprala is working on major renewal of the hexdump . That in mind it seems best to simply to revert the global 'exitval' and avoid conflict with Ondrej's work. Reference: http://markmail.org/message/sbnvuhkboreujj5p Reported-by: Dave Reisner CC: Ondrej Oprala Signed-off-by: Sami Kerola --- diff --git a/text-utils/display.c b/text-utils/display.c index 41ddd8db59..1f9a11b4c9 100644 --- a/text-utils/display.c +++ b/text-utils/display.c @@ -295,7 +295,7 @@ get(void) int next(char **argv) { static int done; - int statok, exitval = 0; + int statok; if (argv) { _argv = argv; @@ -305,14 +305,14 @@ int next(char **argv) if (*_argv) { if (!(freopen(*_argv, "r", stdin))) { warn("%s", *_argv); - exitval = 1; + exitval = EXIT_FAILURE; ++_argv; continue; } statok = done = 1; } else { if (done++) - return(exitval); + return(0); statok = 0; } if (skip) diff --git a/text-utils/hexdump.c b/text-utils/hexdump.c index 411d809868..e966cc3132 100644 --- a/text-utils/hexdump.c +++ b/text-utils/hexdump.c @@ -47,11 +47,11 @@ FS *fshead; /* head of format strings */ ssize_t blocksize; /* data block size */ +int exitval; /* final exit value */ ssize_t length = -1; /* max bytes to read */ int main(int argc, char **argv) { - int exitval; /* final exit value */ FS *tfs; char *p; @@ -76,7 +76,7 @@ int main(int argc, char **argv) for (tfs = fshead; tfs; tfs = tfs->nextfs) rewrite(tfs); - exitval = next(argv); + (void)next(argv); display(); return exitval; } diff --git a/text-utils/hexdump.h b/text-utils/hexdump.h index b2ea1f152b..fa8f632c1f 100644 --- a/text-utils/hexdump.h +++ b/text-utils/hexdump.h @@ -73,6 +73,7 @@ typedef struct _fs { /* format strings */ extern FU *endfu; extern FS *fshead; /* head of format strings list */ extern ssize_t blocksize; /* data block size */ +extern int exitval; /* final exit value */ extern ssize_t length; /* max bytes to read */ extern off_t skip; /* bytes to skip */