=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/strings/Attic/strings.c,v retrieving revision 1.4 retrieving revision 1.5 diff -c -r1.4 -r1.5 *** src/usr.bin/strings/Attic/strings.c 1997/09/11 11:21:54 1.4 --- src/usr.bin/strings/Attic/strings.c 2000/02/23 19:44:08 1.5 *************** *** 1,4 **** ! /* $OpenBSD: strings.c,v 1.4 1997/09/11 11:21:54 deraadt Exp $ */ /* $NetBSD: strings.c,v 1.7 1995/02/15 15:49:19 jtc Exp $ */ /* --- 1,4 ---- ! /* $OpenBSD: strings.c,v 1.5 2000/02/23 19:44:08 provos Exp $ */ /* $NetBSD: strings.c,v 1.7 1995/02/15 15:49:19 jtc Exp $ */ /* *************** *** 44,50 **** #if 0 static char sccsid[] = "@(#)strings.c 8.2 (Berkeley) 1/28/94"; #endif ! static char rcsid[] = "$OpenBSD: strings.c,v 1.4 1997/09/11 11:21:54 deraadt Exp $"; #endif /* not lint */ #include --- 44,50 ---- #if 0 static char sccsid[] = "@(#)strings.c 8.2 (Berkeley) 1/28/94"; #endif ! static char rcsid[] = "$OpenBSD: strings.c,v 1.5 2000/02/23 19:44:08 provos Exp $"; #endif /* not lint */ #include *************** *** 87,93 **** register int ch, cnt; register u_char *C; EXEC *head; ! int exitcode, minlen; short asdata, fflg; u_char *bfr; char *file, *p; --- 87,93 ---- register int ch, cnt; register u_char *C; EXEC *head; ! int exitcode, minlen, maxlen, bfrlen; short asdata, fflg; u_char *bfr; char *file, *p; *************** *** 102,108 **** asdata = exitcode = fflg = 0; offset_format = NULL; minlen = -1; ! while ((ch = getopt(argc, argv, "-0123456789an:oft:")) != -1) switch((char)ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': --- 102,109 ---- asdata = exitcode = fflg = 0; offset_format = NULL; minlen = -1; ! maxlen = -1; ! while ((ch = getopt(argc, argv, "-0123456789an:m:oft:")) != -1) switch((char)ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': *************** *** 128,133 **** --- 129,137 ---- case 'n': minlen = atoi(optarg); break; + case 'm': + maxlen = atoi(optarg); + break; case 'o': offset_format = FORMAT_OCT; break; *************** *** 160,171 **** (void)fprintf(stderr, "strings: length less than 1\n"); exit (1); } ! ! if (!(bfr = malloc(minlen + 1))) { (void)fprintf(stderr, "strings: %s\n", strerror(errno)); exit(1); } ! bfr[minlen] = '\0'; file = "stdin"; do { if (*argv) { --- 164,180 ---- (void)fprintf(stderr, "strings: length less than 1\n"); exit (1); } ! if (maxlen != -1 && maxlen < minlen) { ! (void)fprintf(stderr, "strings: max length less than min\n"); ! exit (1); ! } ! bfrlen = maxlen == -1 ? minlen : maxlen; ! bfr = malloc(bfrlen + 1); ! if (!bfr) { (void)fprintf(stderr, "strings: %s\n", strerror(errno)); exit(1); } ! bfr[bfrlen] = '\0'; file = "stdin"; do { if (*argv) { *************** *** 205,210 **** --- 214,234 ---- *C++ = ch; if (++cnt < minlen) continue; + if (maxlen != -1) { + while ((ch = getch()) != EOF && + ISSTR(ch) && cnt++ < maxlen) + *C++ = ch; + if (ch == EOF || + (ch != 0 && ch != '\n')) { + /* get all of too big string */ + while ((ch = getch()) != EOF && + ISSTR(ch)) + ; + ungetc(ch, stdin); + goto out; + } + *C = 0; + } if (fflg) printf("%s:", file); *************** *** 213,222 **** printf(offset_format, foff - minlen); printf("%s", bfr); ! ! while ((ch = getch()) != EOF && ISSTR(ch)) ! putchar((char)ch); putchar('\n'); } cnt = 0; } --- 237,249 ---- printf(offset_format, foff - minlen); printf("%s", bfr); ! ! if (maxlen == -1) ! while ((ch = getch()) != EOF && ! ISSTR(ch)) ! putchar((char)ch); putchar('\n'); + out: } cnt = 0; }