Adds an option to the strings program to specify a separator between the emitted...
authorErik Ackermann <kurterikackermann@gmail.com>
Thu, 10 Sep 2015 08:29:13 +0000 (09:29 +0100)
committerNick Clifton <nickc@redhat.com>
Thu, 10 Sep 2015 08:29:13 +0000 (09:29 +0100)
* strings.c: Add -s/--output-separator option to specify custom
separator string.
* NEWS: Mention the new feature.
* doc/binutils.text (strings): Document the new command line
option.

binutils/ChangeLog
binutils/NEWS
binutils/doc/binutils.texi
binutils/strings.c

index ba6c0c8c4c87107bad9c51051792deb784d87726..1e1ccd4b0f5124cbf1a8433751f62c41cd251478 100644 (file)
@@ -1,3 +1,11 @@
+2015-09-10  Erik Ackermann  <kurterikackermann@gmail.com>
+
+       * strings.c: Add -s/--output-separator option to specify custom
+       separator string.
+       * NEWS: Mention the new feature.
+       * doc/binutils.text (strings): Document the new command line
+       option.
+
 2015-09-09  Nick Clifton  <nickc@redhat.com>
 
        * doc/binutils.texi (ar): Remove bogus sentance concerning thin
index 36f2c056efaebab3f2cef0c7750bc6010daadf7b..afcd7c963f58a074f0d34207ade5cfc18b2bbf32 100644 (file)
@@ -6,6 +6,8 @@
 
 * Add --update-section option to objcopy.
 
+* Add --output-separator option to strings.
+
 Changes in 2.25:
 
 * Add --data option to strings to only print strings in loadable, initialized
index 8a2a652d09390aa4dac16334b49d219668fd8f00..d9936645677fc9a13b30ff0302c76bdb7c6b2892 100644 (file)
@@ -2790,6 +2790,7 @@ strings [@option{-afovV}] [@option{-}@var{min-len}]
         [@option{-}] [@option{--all}] [@option{--print-file-name}]
         [@option{-T} @var{bfdname}] [@option{--target=}@var{bfdname}]
         [@option{-w}] [@option{--include-all-whitespace}]
+        [@option{-s}] [@option{--output-separator}@var{sep_string}]
         [@option{--help}] [@option{--version}] @var{file}@dots{}
 @c man end
 @end smallexample
@@ -2894,6 +2895,13 @@ By default tab and space characters are included in the strings that
 are displayed, but other whitespace characters, such a newlines and
 carriage returns, are not.  The @option{-w} option changes this so
 that all whitespace characters are considered to be part of a string.
+
+@item -s
+@itemx --output-separator
+By default, output strings are delimited by a new-line. This option
+allows you to supply any string to be used as the output record
+separator.  Useful with --include-all-whitespace where strings
+may contain new-lines internally.
 @end table
 
 @c man end
index 6b77c31387827cacb3f383ba6ce39c02de947892..2c6f0eb4a6032a6ba5ffddfe5a3cf856d8e058dd 100644 (file)
    -T {bfdname}
                Specify a non-default object file format.
 
+  --output-separator=sep_string
+  -s sep_string        String used to separate parsed strings in output.
+               Default is newline.
+
    --help
    -h          Print the usage message on the standard output.
 
@@ -114,6 +118,9 @@ static char *target;
 static char encoding;
 static int encoding_bytes;
 
+/* Output string used to separate parsed strings  */
+static char *output_separator;
+
 static struct option long_options[] =
 {
   {"all", no_argument, NULL, 'a'},
@@ -124,6 +131,7 @@ static struct option long_options[] =
   {"include-all-whitespace", required_argument, NULL, 'w'},
   {"encoding", required_argument, NULL, 'e'},
   {"target", required_argument, NULL, 'T'},
+  {"output-separator", required_argument, NULL, 's'},
   {"help", no_argument, NULL, 'h'},
   {"version", no_argument, NULL, 'v'},
   {NULL, 0, NULL, 0}
@@ -178,8 +186,9 @@ main (int argc, char **argv)
     datasection_only = TRUE;
   target = NULL;
   encoding = 's';
+  output_separator = NULL;
 
-  while ((optc = getopt_long (argc, argv, "adfhHn:wot:e:T:Vv0123456789",
+  while ((optc = getopt_long (argc, argv, "adfhHn:wot:e:T:s:Vv0123456789",
                              long_options, (int *) 0)) != EOF)
     {
       switch (optc)
@@ -248,6 +257,10 @@ main (int argc, char **argv)
          encoding = optarg[0];
          break;
 
+       case 's':
+         output_separator = optarg;
+          break;
+
        case 'V':
        case 'v':
          print_version ("strings");
@@ -650,7 +663,10 @@ print_strings (const char *filename, FILE *stream, file_ptr address,
          putchar (c);
        }
 
-      putchar ('\n');
+      if (output_separator)
+        fputs (output_separator, stdout);
+      else
+        putchar ('\n');
     }
   free (buf);
 }
@@ -681,6 +697,7 @@ usage (FILE *stream, int status)
   -T --target=<BFDNAME>     Specify the binary file format\n\
   -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n\
                             s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n\
+  -s --output-separator=<string> String used to separate strings in output.\n\
   @<file>                   Read options from <file>\n\
   -h --help                 Display this information\n\
   -v -V --version           Print the program's version number\n"));