Clean up strings.c to use busybox's option processing. Bug 006, apparently.

This commit is contained in:
Rob Landley 2005-06-07 03:21:20 +00:00
parent ed830e8693
commit 16cd02e01e

View File

@ -27,99 +27,82 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <getopt.h> #include <getopt.h>
#include <unistd.h>
#include <ctype.h> #include <ctype.h>
#include "busybox.h" #include "busybox.h"
#define ISSTR(ch) (isprint(ch) || ch == '\t') #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 strings_main(int argc, char **argv)
{ {
int n=4, c, i, opt=0, status=EXIT_SUCCESS; int n, c, i = 0, status = EXIT_SUCCESS;
long t=0, count; unsigned long opt;
unsigned long count;
FILE *file = stdin; FILE *file = stdin;
char *string=NULL; char *string;
const char *fmt="%s: "; const char *fmt = "%s: ";
char *n_arg = "4";
while ((i = getopt(argc, argv, "afon:")) > 0)
switch(i) opt = bb_getopt_ulflags (argc, argv, "afon:", &n_arg);
{ /* -a is our default behaviour */
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();
}
argc -= optind; argc -= optind;
argv += optind; argv += optind;
i=0; n = bb_xgetlarg(n_arg, 10, 1, INT_MAX);
string = xcalloc(n + 1, 1);
string=xmalloc(n+1); n--;
string[n]='\0';
n-=1; if ( argc == 0) {
fmt = "{%s}: ";
if(argc==0) *argv = (char *)bb_msg_standard_input;
{ goto PIPE;
fmt="{%s}: ";
*argv=(char *)bb_msg_standard_input;
goto pipe;
} }
for( ;*argv!=NULL && argc>0;argv++) do {
{ if ((file = bb_wfopen(*argv, "r"))) {
if((file=bb_wfopen(*argv,"r"))) PIPE:
{ count = 0;
pipe: do {
c = fgetc(file);
count=0; if (ISSTR(c)) {
do{ if (i <= n) {
c=fgetc(file);
if(ISSTR(c))
{
if(i==0)
t=count;
if(i<=n)
string[i]=c; string[i]=c;
if(i==n) } else {
{ putchar(c);
if(opt == 1 || opt == 3 ) }
printf(fmt,*argv); if (i == n) {
if(opt >= 2 ) if (opt & PRINT_NAME) {
printf("%7lo ", t); printf(fmt, *argv);
}
if (opt & PRINT_OFFSET) {
printf("%7lo ", count - n );
}
printf("%s", string); printf("%s", string);
} }
if(i>n)
putchar(c);
i++; i++;
} } else {
else if (i > n) {
{
if(i>n)
putchar('\n'); putchar('\n');
i=0; }
i = 0;
} }
count++; count++;
}while(c!=EOF); } while (c != EOF);
bb_fclose_nonstdin(file); bb_fclose_nonstdin(file);
} } else {
else
status=EXIT_FAILURE; status=EXIT_FAILURE;
} }
/*free(string);*/ } while ( --argc > 0 );
exit(status); #ifdef CONFIG_FEATURE_CLEAN_UP
free(string);
#endif
bb_fflush_stdout_and_exit(status);
} }
/* /*