diff --git a/miscutils/strings.c b/miscutils/strings.c index 649485033..9d8012aa2 100644 --- a/miscutils/strings.c +++ b/miscutils/strings.c @@ -22,99 +22,106 @@ * Original copyright notice is retained at the end of this file. * * Modified for BusyBox by Erik Andersen + * Badly hacked by Tito Ragusa */ -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include "busybox.h" #define ISSTR(ch) (isprint(ch) || ch == '\t') -int strings_main(int argc, char **argv) +int strings_main(int argc, char **argv) { extern char *optarg; extern int optind; - int ch, cnt; - int exitcode; - int oflg, fflg; - char *file; - size_t foff, minlen; - unsigned char *bfr, *C; - int i; - - exitcode = fflg = oflg = 0; - minlen = -1; - while ((ch = getopt(argc, argv, "an:of")) > 0) - switch(ch) { + int n=4, c, i, opt=0, a=0; + long t, count; + FILE *file; + char *string; + + while ((i = getopt(argc, argv, "an:of")) > 0) + switch(i) + { case 'a': break; case 'f': - fflg = 1; + opt++; break; case 'n': - minlen = atoi(optarg); + n = atoi(optarg); + if(!(n/1)) + show_usage(); break; case 'o': - oflg = 1; + opt++; + opt++; break; default: show_usage(); } + argc -= optind; argv += optind; - if (minlen == -1) - minlen = 4; + i=0; - bfr = xmalloc(minlen); - bfr[minlen] = '\0'; - file = "stdin"; - do { - if (*argv) { - fprintf(stderr, "opening '%s'\n", *argv); - file = *argv++; - if (!freopen(file, "r", stdin)) { - perror_msg("%s", file); - exitcode = EXIT_FAILURE; - continue; - } - } - foff = 0; + if(!argc ) + { + file = stdin; + goto pipe; + } - for (cnt = 0; (ch = getchar()) != EOF;) { - foff++; - if (ISSTR(ch)) { - if (!cnt) - C = bfr; - *C++ = ch; - if (++cnt < minlen) - continue; - if (fflg) - printf("%s:", file); - if (oflg) - printf("%7lo %s", (long)(foff - minlen), (char *)bfr); - else - printf("%s", bfr); - i=0; - while ((ch = getchar()) != EOF && ISSTR(ch)) + for(a=0;a= 2 ) + printf("%7lo ",t); + printf("%s",string); } - if(i>0) - foff+=(i+1); - else - foff++; - putchar('\n'); + if(i>n) + putchar(c); + i++; } - cnt = 0; + else + { + if(i>n) + puts(""); + i=0; + } + count++; + if(c==EOF) + break; } - } while (*argv); - exit(exitcode); + if(file!=stdin) + fclose(file); + } + free(string); + exit(EXIT_SUCCESS); } /* @@ -130,7 +137,7 @@ int strings_main(int argc, char **argv) * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * 3. * * 4. Neither the name of the University nor the names of its contributors diff --git a/testsuite/strings/strings-works-like-GNU b/testsuite/strings/strings-works-like-GNU new file mode 100644 index 000000000..02e423134 --- /dev/null +++ b/testsuite/strings/strings-works-like-GNU @@ -0,0 +1,8 @@ +rm -f foo bar +strings -af ../../busybox > foo +busybox strings -af ../../busybox > bar +test ! -f foo -a -f bar +if [ $? = 0 ] ; then + diff -q foo bar +fi; +