On 10/15/2016 03:22 PM, Tito wrote:
Hi,
the attached patch implements -t radix option
for strings program and fixes the help text
for -o option.
During the little testing I've done the output
seems the same as binutils string.

Ciao,
Tito

Hi,
minor code cleanup, no changes
better readability.

Ciao,
Tito

v2: minor code cleanup, no changes.
v1: Implement -t radix option.
    Fix help text for -o option.

Signed-off-by: Tito Ragusa <farmat...@tiscali.it>


--- miscutils/strings.c.original	2015-03-14 14:39:57.000000000 +0100
+++ miscutils/strings.c	2016-10-15 21:37:35.913267728 +0200
@@ -8,13 +8,14 @@
  */
 
 //usage:#define strings_trivial_usage
-//usage:       "[-afo] [-n LEN] [FILE]..."
+//usage:       "[-afo] [-n LEN] [-t o,d,x] [FILE]..."
 //usage:#define strings_full_usage "\n\n"
 //usage:       "Display printable strings in a binary file\n"
-//usage:     "\n	-a	Scan whole file (default)"
-//usage:     "\n	-f	Precede strings with filenames"
-//usage:     "\n	-n LEN	At least LEN characters form a string (default 4)"
-//usage:     "\n	-o	Precede strings with decimal offsets"
+//usage:     "\n	-a		Scan whole file (default)"
+//usage:     "\n	-f		Precede strings with filenames"
+//usage:     "\n	-n LEN		At least LEN characters form a string (default 4)"
+//usage:     "\n	-o		Precede strings with octal offsets"
+//usage:     "\n	-t o,d,x	Print the location of the string in base 8, 10 or 16"
 
 #include "libbb.h"
 
@@ -22,6 +23,7 @@
 #define PRINT_NAME    2
 #define PRINT_OFFSET  4
 #define SIZE          8
+#define PRINT_RADIX  16
 
 int strings_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int strings_main(int argc UNUSED_PARAM, char **argv)
@@ -33,8 +35,11 @@ int strings_main(int argc UNUSED_PARAM,
 	char *string;
 	const char *fmt = "%s: ";
 	const char *n_arg = "4";
+	/* default for -o */
+	const char *radix = "o";
+	char *radix_fmt;
 
-	getopt32(argv, "afon:", &n_arg);
+	getopt32(argv, "afon:t:", &n_arg, &radix);
 	/* -a is our default behaviour */
 	/*argc -= optind;*/
 	argv += optind;
@@ -43,6 +48,11 @@ int strings_main(int argc UNUSED_PARAM,
 	string = xzalloc(n + 1);
 	n--;
 
+	if ((radix[0] != 'd' && radix[0] != 'o' && radix[0] != 'x') || radix[1] != 0)
+		bb_show_usage();
+	
+	radix_fmt = xasprintf("%%7"OFF_FMT"%s ", radix);
+
 	if (!*argv) {
 		fmt = "{%s}: ";
 		*--argv = (char *)bb_msg_standard_input;
@@ -67,8 +77,8 @@ int strings_main(int argc UNUSED_PARAM,
 						if (option_mask32 & PRINT_NAME) {
 							printf(fmt, *argv);
 						}
-						if (option_mask32 & PRINT_OFFSET) {
-							printf("%7"OFF_FMT"o ", offset - n);
+						if (option_mask32 & (PRINT_OFFSET | PRINT_RADIX)) {
+							printf(radix_fmt, offset - n);
 						}
 						fputs(string, stdout);
 					}
@@ -85,8 +95,10 @@ int strings_main(int argc UNUSED_PARAM,
 		fclose_if_not_stdin(file);
 	} while (*++argv);
 
-	if (ENABLE_FEATURE_CLEAN_UP)
+	if (ENABLE_FEATURE_CLEAN_UP) {
 		free(string);
+		free(radix_fmt);
+	}
 
 	fflush_stdout_and_exit(status);
 }
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to