This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] strings: Add --include-all-whitespace option


This patch adds an option to allow all whitespace to be considered a
valid "string", not just the space character covered in ISPRINT and
the TAB character which is special cased.

This add some context for the previous patch for a custom record
separator, because used with this option newlines can be inside valid
text, we might want to supply a custom unique dlimiter.

Erik
From a72f19f818970233ec256f61b902aecaaa2a59d6 Mon Sep 17 00:00:00 2001
From: Erik Ackermann <kurterikackermann@gmail.com>
Date: Wed, 18 Jun 2014 20:07:43 -0700
Subject: [PATCH] Add --include-all-whitespace option to consider all
 whitespace as valid in parsing.

---
 binutils/strings.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/binutils/strings.c b/binutils/strings.c
index bb00d41..b071447 100644
--- a/binutils/strings.c
+++ b/binutils/strings.c
@@ -35,6 +35,10 @@
    -t {o,x,d}	Print the offset within the file before each string,
 		in octal/hex/decimal.
 
+  --include-all-whitespace
+  -w		By default tab and space are the only whitepace included in graphic
+		char sequences. this option considers all of isspace() valid.
+
    -o		Like -to.  (Some other implementations have -o like -to,
 		others like -td.  We chose one arbitrarily.)
 
@@ -68,7 +72,9 @@
 #define STRING_ISGRAPHIC(c) \
       (   (c) >= 0 \
        && (c) <= 255 \
-       && ((c) == '\t' || ISPRINT (c) || (encoding == 'S' && (c) > 127)))
+       && ((c) == '\t' || ISPRINT (c) || (encoding == 'S' && (c) > 127) \
+           || (include_all_whitespace == TRUE && ISSPACE (c))) \
+      )
 
 #ifndef errno
 extern int errno;
@@ -83,6 +89,9 @@ static int address_radix;
 /* Minimum length of sequence of graphic chars to trigger output.  */
 static int string_min;
 
+/* Whether or not we include all whitespace as a graphic char.   */
+static bfd_boolean include_all_whitespace;
+
 /* TRUE means print address within file for each string.  */
 static bfd_boolean print_addresses;
 
@@ -108,6 +117,7 @@ static struct option long_options[] =
   {"print-file-name", no_argument, NULL, 'f'},
   {"bytes", required_argument, NULL, 'n'},
   {"radix", required_argument, NULL, 't'},
+  {"include-all-whitespace", required_argument, NULL, 'w'},
   {"encoding", required_argument, NULL, 'e'},
   {"target", required_argument, NULL, 'T'},
   {"help", no_argument, NULL, 'h'},
@@ -154,13 +164,14 @@ main (int argc, char **argv)
   expandargv (&argc, &argv);
 
   string_min = 4;
+  include_all_whitespace = FALSE;
   print_addresses = FALSE;
   print_filenames = FALSE;
   datasection_only = TRUE;
   target = NULL;
   encoding = 's';
 
-  while ((optc = getopt_long (argc, argv, "afhHn:ot:e:T:Vv0123456789",
+  while ((optc = getopt_long (argc, argv, "afhHn:wot:e:T:Vv0123456789",
 			      long_options, (int *) 0)) != EOF)
     {
       switch (optc)
@@ -183,6 +194,10 @@ main (int argc, char **argv)
 	    fatal (_("invalid integer argument %s"), optarg);
 	  break;
 
+	case 'w':
+	  include_all_whitespace = TRUE;
+	  break;
+
 	case 'o':
 	  print_addresses = TRUE;
 	  address_radix = 8;
@@ -639,6 +654,7 @@ usage (FILE *stream, int status)
   -n --bytes=[number]       Locate & print any NUL-terminated sequence of at\n\
   -<number>                   least [number] characters (default 4).\n\
   -t --radix={o,d,x}        Print the location of the string in base 8, 10 or 16\n\
+  -w --include-all-whitespace Include all whitespace as valid string characters\n\
   -o                        An alias for --radix=o\n\
   -T --target=<BFDNAME>     Specify the binary file format\n\
   -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n\
-- 
1.9.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]