From 55edd97b4b2fb373e7895c449ff439efb6de1509 Mon Sep 17 00:00:00 2001 From: Erik Ackermann Date: Thu, 10 Sep 2015 09:29:13 +0100 Subject: [PATCH] Adds an option to the strings program to specify a separator between the emitted pieces of text. * 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 | 8 ++++++++ binutils/NEWS | 2 ++ binutils/doc/binutils.texi | 8 ++++++++ binutils/strings.c | 21 +++++++++++++++++++-- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index ba6c0c8..1e1ccd4 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,11 @@ +2015-09-10 Erik Ackermann + + * 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 * doc/binutils.texi (ar): Remove bogus sentance concerning thin diff --git a/binutils/NEWS b/binutils/NEWS index 36f2c05..afcd7c9 100644 --- a/binutils/NEWS +++ b/binutils/NEWS @@ -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 diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index 8a2a652..d993664 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -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 diff --git a/binutils/strings.c b/binutils/strings.c index 6b77c31..2c6f0eb 100644 --- a/binutils/strings.c +++ b/binutils/strings.c @@ -55,6 +55,10 @@ -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= 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 used to separate strings in output.\n\ @ Read options from \n\ -h --help Display this information\n\ -v -V --version Print the program's version number\n")); -- 2.7.4