diff options
author | Sami Kerola <kerolasa@iki.fi> | 2013-09-08 17:09:09 +0100 |
---|---|---|
committer | Karel Zak <kzak@redhat.com> | 2013-09-10 12:57:31 +0200 |
commit | 4ccf1137046d3f28bf2f2781a095ecd225294fd8 (patch) | |
tree | e1284eff2f74cdcb29e08e5718f4bae029744c5b | |
parent | 0a2c1e8ed72547571eb3ed6d492c89b136993d11 (diff) | |
download | util-linux-4ccf1137046d3f28bf2f2781a095ecd225294fd8.tar.gz |
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 <d@falconindy.com>
CC: Ondrej Oprala <ooprala@redhat.com>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
-rw-r--r-- | text-utils/display.c | 6 | ||||
-rw-r--r-- | text-utils/hexdump.c | 4 | ||||
-rw-r--r-- | text-utils/hexdump.h | 1 |
3 files changed, 6 insertions, 5 deletions
diff --git a/text-utils/display.c b/text-utils/display.c index 41ddd8db..1f9a11b4 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 411d8098..e966cc31 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 b2ea1f15..fa8f632c 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 */ |