Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Oct 2016 17:07:53 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r307969 - head/contrib/elftoolchain/strings
Message-ID:  <201610261707.u9QH7rIm025300@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: emaste
Date: Wed Oct 26 17:07:53 2016
New Revision: 307969
URL: https://svnweb.freebsd.org/changeset/base/307969

Log:
  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).
  
  Reviewed by:	brooks
  MFC after:	1 month
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D8334

Modified:
  head/contrib/elftoolchain/strings/strings.c

Modified: head/contrib/elftoolchain/strings/strings.c
==============================================================================
--- head/contrib/elftoolchain/strings/strings.c	Wed Oct 26 16:03:26 2016	(r307968)
+++ head/contrib/elftoolchain/strings/strings.c	Wed Oct 26 17:07:53 2016	(r307969)
@@ -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 off
 	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 off
 	}
 _exit1:
 	free(obuf);
-	return (RETURN_OK);
+	return (0);
 }
 
 #define	USAGE_MESSAGE	"\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201610261707.u9QH7rIm025300>