From 92b7e7baa11a4dd7edd02b358857745a75bcfaad Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 13 Mar 2003 18:49:45 +0000 Subject: Patch from Tito Ragusa: The changes I've made: in strings.c: 1) fix memory allocation error I've detected with MALLOC_CHECK_=1 in *string; 2) code clean up; 3) fix compiler warnings about uninitialized vars; --- miscutils/strings.c | 104 ++++++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 51 deletions(-) (limited to 'miscutils/strings.c') diff --git a/miscutils/strings.c b/miscutils/strings.c index 9d8012a..ace4bed 100644 --- a/miscutils/strings.c +++ b/miscutils/strings.c @@ -37,29 +37,24 @@ 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, 1, LONG_MAX, 10); break; default: show_usage(); @@ -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,53 @@ 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; + else + { + if(i>n) + puts(""); + i=0; + } + count++; } - count++; - if(c==EOF) - break; + while(c!=EOF); + + if(file!=stdin) + fclose(file); + } + else + { + perror_msg("%s",argv[a]); + status=EXIT_FAILURE; } - if(file!=stdin) - fclose(file); } free(string); - exit(EXIT_SUCCESS); + exit(status); } /* -- cgit v1.1