1 /* vi: set sw=4 ts=4: */
3 * strings implementation for busybox
5 * Copyright 2003 Tito Ragusa <farmatito@tiscali.it>
7 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
10 //usage:#define strings_trivial_usage
11 //usage: "[-afo] [-n LEN] [FILE]..."
12 //usage:#define strings_full_usage "\n\n"
13 //usage: "Display printable strings in a binary file\n"
15 //usage: "\n -a Scan whole file (default)"
16 //usage: "\n -f Precede strings with filenames"
17 //usage: "\n -n LEN At least LEN characters form a string (default 4)"
18 //usage: "\n -o Precede strings with decimal offsets"
24 #define PRINT_OFFSET 4
27 int strings_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
28 int strings_main(int argc UNUSED_PARAM, char **argv)
30 int n, c, status = EXIT_SUCCESS;
35 const char *fmt = "%s: ";
36 const char *n_arg = "4";
38 getopt32(argv, "afon:", &n_arg);
39 /* -a is our default behaviour */
43 n = xatou_range(n_arg, 1, INT_MAX);
44 string = xzalloc(n + 1);
49 *--argv = (char *)bb_msg_standard_input;
53 file = fopen_or_warn_stdin(*argv);
55 status = EXIT_FAILURE;
62 if (isprint_asciionly(c) || c == '\t') {
68 if (option_mask32 & PRINT_NAME) {
71 if (option_mask32 & PRINT_OFFSET) {
72 printf("%7"OFF_FMT"o ", offset - n);
74 fputs(string, stdout);
86 fclose_if_not_stdin(file);
89 if (ENABLE_FEATURE_CLEAN_UP)
92 fflush_stdout_and_exit(status);