Clean up strings.c to use busybox's option processing. Bug 006, apparently.
This commit is contained in:
parent
ed830e8693
commit
16cd02e01e
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user