summaryrefslogtreecommitdiffstats
path: root/contrib/elftoolchain
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2016-11-25 00:25:59 +0000
committeremaste <emaste@FreeBSD.org>2016-11-25 00:25:59 +0000
commitda711180e126400521ec0737a553061f9230d0bd (patch)
treea7b44ae34bdb91003634f54b78cb600a68783745 /contrib/elftoolchain
parentb2ffd6a229ed6549e6b2ccbea064a84cb483ab28 (diff)
downloadFreeBSD-src-da711180e126400521ec0737a553061f9230d0bd.zip
FreeBSD-src-da711180e126400521ec0737a553061f9230d0bd.tar.gz
MFC r307969: strings: fix exit status if a file before the last one fails
Previously a command like "strings f1 f2 f3" reported the exit status based only on processing the last file. As with GNU strings, report an error exit status if an error was encountered processing any of the files. While here simplify the exit status handling to just success (0) / failure (1).
Diffstat (limited to 'contrib/elftoolchain')
-rw-r--r--contrib/elftoolchain/strings/strings.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/contrib/elftoolchain/strings/strings.c b/contrib/elftoolchain/strings/strings.c
index 8de29ca..a936b6b 100644
--- a/contrib/elftoolchain/strings/strings.c
+++ b/contrib/elftoolchain/strings/strings.c
@@ -48,12 +48,6 @@
ELFTC_VCSID("$Id: strings.c 3446 2016-05-03 01:31:17Z emaste $");
-enum return_code {
- RETURN_OK,
- RETURN_NOINPUT,
- RETURN_SOFTWARE
-};
-
enum radix_style {
RADIX_DECIMAL,
RADIX_HEX,
@@ -107,7 +101,7 @@ main(int argc, char **argv)
{
int ch, rc;
- rc = RETURN_OK;
+ rc = 0;
min_len = 0;
encoding_size = 1;
if (elf_version(EV_CURRENT) == EV_NONE)
@@ -197,7 +191,8 @@ main(int argc, char **argv)
if (!*argv)
rc = handle_file("{standard input}");
else while (*argv) {
- rc = handle_file(*argv);
+ if (handle_file(*argv) != 0)
+ rc = 1;
argv++;
}
return (rc);
@@ -209,11 +204,11 @@ handle_file(const char *name)
int fd, rt;
if (name == NULL)
- return (RETURN_NOINPUT);
+ return (1);
if (strcmp("{standard input}", name) != 0) {
if (freopen(name, "rb", stdin) == NULL) {
warnx("'%s': %s", name, strerror(errno));
- return (RETURN_NOINPUT);
+ return (1);
}
} else {
return (find_strings(name, (off_t)0, (off_t)0));
@@ -221,7 +216,7 @@ handle_file(const char *name)
fd = fileno(stdin);
if (fd < 0)
- return (RETURN_NOINPUT);
+ return (1);
rt = handle_elf(name, fd);
return (rt);
}
@@ -239,7 +234,7 @@ handle_binary(const char *name, int fd)
(void) lseek(fd, (off_t)0, SEEK_SET);
if (!fstat(fd, &buf))
return (find_strings(name, (off_t)0, buf.st_size));
- return (RETURN_SOFTWARE);
+ return (1);
}
/*
@@ -257,7 +252,7 @@ handle_elf(const char *name, int fd)
Elf_Scn *scn;
int rc;
- rc = RETURN_OK;
+ rc = 0;
/* If entire file is chosen, treat it as a binary file */
if (entire_file)
return (handle_binary(name, fd));
@@ -272,7 +267,7 @@ handle_elf(const char *name, int fd)
if (gelf_getehdr(elf, &elfhdr) == NULL) {
(void) elf_end(elf);
warnx("%s: ELF file could not be processed", name);
- return (RETURN_SOFTWARE);
+ return (1);
}
if (elfhdr.e_shnum == 0 && elfhdr.e_type == ET_CORE) {
@@ -352,7 +347,7 @@ find_strings(const char *name, off_t offset, off_t size)
if ((obuf = (char*)calloc(1, min_len + 1)) == NULL) {
(void) fprintf(stderr, "Unable to allocate memory: %s\n",
strerror(errno));
- return (RETURN_SOFTWARE);
+ return (1);
}
(void) fseeko(stdin, offset, SEEK_SET);
@@ -426,7 +421,7 @@ find_strings(const char *name, off_t offset, off_t size)
}
_exit1:
free(obuf);
- return (RETURN_OK);
+ return (0);
}
#define USAGE_MESSAGE "\
OpenPOWER on IntegriCloud