X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=miscutils%2Fstrings.c;h=111aa94ba0f0bc4675d4bea162edf0fead205bba;hb=843c5ef0f95e0a6f61f4e27d0355aca5e09ee6b1;hp=1231a93bd05f8999fb25560fae17e7bc1d272a4f;hpb=bb13624d8c31d5e4b725c5df0d9d19d834dc4a7b;p=oweals%2Fbusybox.git diff --git a/miscutils/strings.c b/miscutils/strings.c index 1231a93bd..111aa94ba 100644 --- a/miscutils/strings.c +++ b/miscutils/strings.c @@ -27,100 +27,82 @@ #include #include -#include #include -#include #include #include "busybox.h" #define ISSTR(ch) (isprint(ch) || ch == '\t') +#define WHOLE_FILE 1 +#define PRINT_NAME 2 +#define PRINT_OFFSET 4 +#define SIZE 8 + int strings_main(int argc, char **argv) { - int n=4, c, i, opt=0, a=0, status=EXIT_SUCCESS; - long t=0, count; - FILE *file; - char *string=NULL; - - while ((i = getopt(argc, argv, "afon:")) > 0) - switch(i) - { - case 'a': - break; - case 'f': - opt+=1; - break; - case 'o': - opt+=2; - break; - case 'n': - n = bb_xgetlarg(optarg, 10, 1, INT_MAX); - break; - default: - bb_show_usage(); - } - + int n, c, i = 0, status = EXIT_SUCCESS; + unsigned long opt; + unsigned long count; + FILE *file = stdin; + char *string; + const char *fmt = "%s: "; + char *n_arg = "4"; + + opt = bb_getopt_ulflags (argc, argv, "afon:", &n_arg); + /* -a is our default behaviour */ + argc -= optind; argv += optind; - i=0; - - string=xmalloc(n+1); - string[n]='\0'; - n-=1; - - if(!argc ) - { - file = stdin; - goto pipe; + n = bb_xgetlarg(n_arg, 10, 1, INT_MAX); + string = xcalloc(n + 1, 1); + n--; + + if ( argc == 0) { + fmt = "{%s}: "; + *argv = (char *)bb_msg_standard_input; + goto PIPE; } - - for(a=0;a= 2 ) - printf("%7lo ", t); + } else { + putchar(c); + } + if (i == n) { + if (opt & PRINT_NAME) { + printf(fmt, *argv); + } + if (opt & PRINT_OFFSET) { + printf("%7lo ", count - n ); + } printf("%s", string); } - if(i>n) - putchar(c); i++; - } - else - { - if(i>n) + } else { + if (i > n) { putchar('\n'); - i=0; + } + i = 0; } count++; - }while(c!=EOF); - + } while (c != EOF); bb_fclose_nonstdin(file); - } - else - { - bb_perror_msg("%s",argv[a]); + } else { status=EXIT_FAILURE; } - } - free(string); - exit(status); + } while ( --argc > 0 ); + + if (ENABLE_FEATURE_CLEAN_UP) free(string); + + bb_fflush_stdout_and_exit(status); } /* @@ -137,7 +119,7 @@ pipe: * documentation and/or other materials provided with the distribution. * * 3. + * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change> * * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software