X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=miscutils%2Fstrings.c;h=1231a93bd05f8999fb25560fae17e7bc1d272a4f;hb=c2942f0904edffa58877abf9d1f13c5d91a0ddee;hp=9d8012aa22f4b76d21d8ad8644419c45d63b923d;hpb=65ddf77fbd0f1ec832f062cf05a15bbd2cf1080e;p=oweals%2Fbusybox.git diff --git a/miscutils/strings.c b/miscutils/strings.c index 9d8012aa2..1231a93bd 100644 --- a/miscutils/strings.c +++ b/miscutils/strings.c @@ -21,7 +21,7 @@ * * Original copyright notice is retained at the end of this file. * - * Modified for BusyBox by Erik Andersen + * Modified for BusyBox by Erik Andersen * Badly hacked by Tito Ragusa */ @@ -37,32 +37,27 @@ int strings_main(int argc, char **argv) { - extern char *optarg; - extern int optind; - int n=4, c, i, opt=0, a=0; - long t, count; + int n=4, c, i, opt=0, a=0, status=EXIT_SUCCESS; + long t=0, count; FILE *file; - char *string; - - while ((i = getopt(argc, argv, "an:of")) > 0) + char *string=NULL; + + while ((i = getopt(argc, argv, "afon:")) > 0) switch(i) { case 'a': break; case 'f': - opt++; - break; - case 'n': - n = atoi(optarg); - if(!(n/1)) - show_usage(); + opt+=1; break; case 'o': - opt++; - opt++; + opt+=2; + break; + case 'n': + n = bb_xgetlarg(optarg, 10, 1, INT_MAX); break; default: - show_usage(); + bb_show_usage(); } argc -= optind; @@ -70,6 +65,10 @@ int strings_main(int argc, char **argv) i=0; + string=xmalloc(n+1); + string[n]='\0'; + n-=1; + if(!argc ) { file = stdin; @@ -78,50 +77,50 @@ int strings_main(int argc, char **argv) for(a=0;a= 2 ) - printf("%7lo ",t); - printf("%s",string); + if(i==0) + t=count; + if(i<=n) + string[i]=c; + if(i==n) + { + if(opt == 1 || opt == 3 ) + printf("%s: ", (!argv[a])? "{stdin}" : argv[a]); + if(opt >= 2 ) + printf("%7lo ", t); + printf("%s", string); + } + if(i>n) + putchar(c); + i++; } - if(i>n) - putchar(c); - i++; - } - else - { - if(i>n) - puts(""); - i=0; - } - count++; - if(c==EOF) - break; + else + { + if(i>n) + putchar('\n'); + i=0; + } + count++; + }while(c!=EOF); + + bb_fclose_nonstdin(file); + } + else + { + bb_perror_msg("%s",argv[a]); + status=EXIT_FAILURE; } - if(file!=stdin) - fclose(file); } free(string); - exit(EXIT_SUCCESS); + exit(status); } /*