From 880e6c65503a1a969bd00959b1e7a19a31914c61 Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Mon, 19 Jul 2010 10:33:16 -0700 Subject: nanddump: add "forcebinary" flag Restrict binary dumping so that by default, binary garbage is not printed directly to a terminal. Output redicted to files or piped to other commands should not be affected (as judged by "isatty(ofd)"). A new flag "-a" or "--forcebinary" is included so that users can override this behavior if necessary. Signed-off-by: Brian Norris Signed-off-by: Artem Bityutskiy --- nanddump.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'nanddump.c') diff --git a/nanddump.c b/nanddump.c index cd018c6..acfdb33 100644 --- a/nanddump.c +++ b/nanddump.c @@ -45,6 +45,7 @@ static void display_help (void) "\n" " --help Display this help and exit\n" " --version Output version information and exit\n" +"-a --forcebinary Force printing of binary data to tty\n" "-c --canonicalprint Print canonical Hex+ASCII dump\n" "-f file --file=file Dump to file\n" "-i --ignoreerrors Ignore errors\n" @@ -85,6 +86,7 @@ static const char *dumpfile; // dump file name static bool omitbad = false; static bool quiet = false; // suppress diagnostic output static bool canonical = false; // print nice + ascii +static bool forcebinary = false; // force printing binary to tty static void process_options (int argc, char * const argv[]) { @@ -92,10 +94,11 @@ static void process_options (int argc, char * const argv[]) for (;;) { int option_index = 0; - static const char *short_options = "bs:f:il:opqnc"; + static const char *short_options = "bs:f:il:opqnca"; static const struct option long_options[] = { {"help", no_argument, 0, 0}, {"version", no_argument, 0, 0}, + {"forcebinary", no_argument, 0, 'a'}, {"canonicalprint", no_argument, 0, 'c'}, {"file", required_argument, 0, 'f'}, {"ignoreerrors", no_argument, 0, 'i'}, @@ -147,6 +150,9 @@ static void process_options (int argc, char * const argv[]) case 'o': omitoob = true; break; + case 'a': + forcebinary = true; + break; case 'c': canonical = true; case 'p': @@ -170,6 +176,13 @@ static void process_options (int argc, char * const argv[]) exit(EXIT_FAILURE); } + if (forcebinary && pretty_print) { + fprintf(stderr, "The forcebinary and pretty print options are\n" + "mutually-exclusive. Choose one or the " + "other.\n"); + exit(EXIT_FAILURE); + } + if ((argc - optind) != 1 || error) display_help (); @@ -355,6 +368,13 @@ int main(int argc, char * const argv[]) exit(EXIT_FAILURE); } + if (!pretty_print && !forcebinary && isatty(ofd)) { + fprintf(stderr, "Not printing binary garbage to tty. Use '-a'\n" + "or '--forcebinary' to override.\n"); + close(fd); + exit(EXIT_FAILURE); + } + /* Initialize start/end addresses and block size */ if (length) end_addr = start_addr + length; -- cgit v1.2.3