From 720c1ecc90c5ed1ceec93fcd7fda83c927734134 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 28 Mar 2019 14:29:00 -0700 Subject: [PATCH] BSD grep: sync with upstream. No significant changes, but this does get rid of our local modifications. Bug: http://b/129089665 Test: builds Change-Id: Ie6e3cc2198c302fc998fe6fcf027661e5dca88f0 --- toolbox/Android.bp | 2 ++ toolbox/upstream-netbsd/usr.bin/grep/file.c | 39 ++++++++++++--------- toolbox/upstream-netbsd/usr.bin/grep/grep.c | 21 +++++++++-- toolbox/upstream-netbsd/usr.bin/grep/grep.h | 6 ++-- toolbox/upstream-netbsd/usr.bin/grep/util.c | 11 +++--- 5 files changed, 51 insertions(+), 28 deletions(-) diff --git a/toolbox/Android.bp b/toolbox/Android.bp index 7ad6f1cc4..1f852ff2a 100644 --- a/toolbox/Android.bp +++ b/toolbox/Android.bp @@ -7,6 +7,8 @@ cc_defaults { "-Wno-unused-const-variable", "-D_FILE_OFFSET_BITS=64", "-DWITHOUT_NLS", + "-DWITHOUT_BZ2", + "-DWITHOUT_GZIP", ], } diff --git a/toolbox/upstream-netbsd/usr.bin/grep/file.c b/toolbox/upstream-netbsd/usr.bin/grep/file.c index cf4a0fa4e..ef057ba15 100644 --- a/toolbox/upstream-netbsd/usr.bin/grep/file.c +++ b/toolbox/upstream-netbsd/usr.bin/grep/file.c @@ -1,4 +1,4 @@ -/* $NetBSD: file.c,v 1.7 2011/04/18 22:46:48 joerg Exp $ */ +/* $NetBSD: file.c,v 1.10 2018/08/12 09:03:21 christos Exp $ */ /* $FreeBSD: head/usr.bin/grep/file.c 211496 2010-08-19 09:28:59Z des $ */ /* $OpenBSD: file.c,v 1.11 2010/07/02 20:48:48 nicm Exp $ */ @@ -35,15 +35,12 @@ #endif #include -__RCSID("$NetBSD: file.c,v 1.7 2011/04/18 22:46:48 joerg Exp $"); +__RCSID("$NetBSD: file.c,v 1.10 2018/08/12 09:03:21 christos Exp $"); #include #include #include -#ifndef __ANDROID__ -#include -#endif #include #include #include @@ -53,17 +50,16 @@ __RCSID("$NetBSD: file.c,v 1.7 2011/04/18 22:46:48 joerg Exp $"); #include #include #include -#ifndef __ANDROID__ -#include -#endif #include "grep.h" #define MAXBUFSIZ (32 * 1024) #define LNBUFBUMP 80 -#ifndef __ANDROID__ +#ifndef WITHOUT_GZIP static gzFile gzbufdesc; +#endif +#ifndef WITHOUT_BZ2 static BZFILE* bzbufdesc; #endif @@ -77,18 +73,21 @@ static size_t lnbuflen; static inline int grep_refill(struct file *f) { - ssize_t nr; -#ifndef __ANDROID__ + ssize_t nr = -1; int bzerr; -#endif bufpos = buffer; bufrem = 0; -#ifndef __ANDROID__ - if (filebehave == FILE_GZIP) +#ifndef WITHOUT_GZIP + if (filebehave == FILE_GZIP) { nr = gzread(gzbufdesc, buffer, MAXBUFSIZ); - else if (filebehave == FILE_BZIP && bzbufdesc != NULL) { + if (nr == -1) + return -1; + } +#endif +#ifndef WITHOUT_BZ2 + if (filebehave == FILE_BZIP && bzbufdesc != NULL) { nr = BZ2_bzRead(&bzerr, bzbufdesc, buffer, MAXBUFSIZ); switch (bzerr) { case BZ_OK: @@ -114,9 +113,13 @@ grep_refill(struct file *f) /* Make sure we exit with an error */ nr = -1; } - } else + if (nr == -1) + return -1; + } #endif + if (nr == -1) { nr = read(f->fd, buffer, MAXBUFSIZ); + } if (nr < 0) return (-1); @@ -204,11 +207,13 @@ static inline struct file * grep_file_init(struct file *f) { -#ifndef __ANDROID__ +#ifndef WITHOUT_GZIP if (filebehave == FILE_GZIP && (gzbufdesc = gzdopen(f->fd, "r")) == NULL) goto error; +#endif +#ifndef WITHOUT_BZ2 if (filebehave == FILE_BZIP && (bzbufdesc = BZ2_bzdopen(f->fd, "r")) == NULL) goto error; diff --git a/toolbox/upstream-netbsd/usr.bin/grep/grep.c b/toolbox/upstream-netbsd/usr.bin/grep/grep.c index 1ea6ed3aa..bad2a7398 100644 --- a/toolbox/upstream-netbsd/usr.bin/grep/grep.c +++ b/toolbox/upstream-netbsd/usr.bin/grep/grep.c @@ -1,4 +1,4 @@ -/* $NetBSD: grep.c,v 1.12 2014/07/11 16:30:45 christos Exp $ */ +/* $NetBSD: grep.c,v 1.15 2018/08/12 09:03:21 christos Exp $ */ /* $FreeBSD: head/usr.bin/grep/grep.c 211519 2010-08-19 22:55:17Z delphij $ */ /* $OpenBSD: grep.c,v 1.42 2010/07/02 22:18:03 tedu Exp $ */ @@ -34,7 +34,7 @@ #endif #include -__RCSID("$NetBSD: grep.c,v 1.12 2014/07/11 16:30:45 christos Exp $"); +__RCSID("$NetBSD: grep.c,v 1.15 2018/08/12 09:03:21 christos Exp $"); #include #include @@ -170,7 +170,9 @@ static const char optstr[] = struct option long_options[] = { {"binary-files", required_argument, NULL, BIN_OPT}, +#ifndef WITHOUT_GZIP {"decompress", no_argument, NULL, DECOMPRESS_OPT}, +#endif {"help", no_argument, NULL, HELP_OPT}, {"mmap", no_argument, NULL, MMAP_OPT}, {"line-buffered", no_argument, NULL, LINEBUF_OPT}, @@ -197,7 +199,9 @@ struct option long_options[] = {"no-filename", no_argument, NULL, 'h'}, {"with-filename", no_argument, NULL, 'H'}, {"ignore-case", no_argument, NULL, 'i'}, +#ifndef WITHOUT_BZ2 {"bz2decompress", no_argument, NULL, 'J'}, +#endif {"files-with-matches", no_argument, NULL, 'l'}, {"files-without-match", no_argument, NULL, 'L'}, {"max-count", required_argument, NULL, 'm'}, @@ -338,6 +342,7 @@ main(int argc, char *argv[]) case 'g': grepbehave = GREP_BASIC; break; +#ifndef WITHOUT_GZIP case 'z': filebehave = FILE_GZIP; switch(__progname[1]) { @@ -352,6 +357,7 @@ main(int argc, char *argv[]) break; } break; +#endif } lastc = '\0'; @@ -491,9 +497,11 @@ main(int argc, char *argv[]) iflag = true; cflags |= REG_ICASE; break; +#ifndef WITHOUT_BZ2 case 'J': filebehave = FILE_BZIP; break; +#endif case 'L': lflag = false; Lflag = true; @@ -596,9 +604,11 @@ main(int argc, char *argv[]) strcasecmp("no", optarg) != 0) errx(2, getstr(3), "--color"); break; +#ifndef WITHOUT_GZIP case DECOMPRESS_OPT: filebehave = FILE_GZIP; break; +#endif case LABEL_OPT: label = optarg; break; @@ -679,8 +689,13 @@ main(int argc, char *argv[]) } } - if (lbflag) + if (lbflag) { +#ifdef _IOLBF + setvbuf(stdout, NULL, _IOLBF, 0); +#else setlinebuf(stdout); +#endif + } if ((aargc == 0 || aargc == 1) && !Hflag) hflag = true; diff --git a/toolbox/upstream-netbsd/usr.bin/grep/grep.h b/toolbox/upstream-netbsd/usr.bin/grep/grep.h index fa2a3e3ce..b7ef7fa35 100644 --- a/toolbox/upstream-netbsd/usr.bin/grep/grep.h +++ b/toolbox/upstream-netbsd/usr.bin/grep/grep.h @@ -1,4 +1,4 @@ -/* $NetBSD: grep.h,v 1.8 2012/05/06 22:27:00 joerg Exp $ */ +/* $NetBSD: grep.h,v 1.10 2018/08/12 09:03:21 christos Exp $ */ /* $OpenBSD: grep.h,v 1.15 2010/04/05 03:03:55 tedu Exp $ */ /* $FreeBSD: head/usr.bin/grep/grep.h 211496 2010-08-19 09:28:59Z des $ */ @@ -29,14 +29,14 @@ * SUCH DAMAGE. */ -#ifndef __ANDROID__ +#ifndef WITHOUT_BZ2 #include #endif #include #include #include #include -#ifndef __ANDROID__ +#ifndef WITHOUT_GZIP #include #endif diff --git a/toolbox/upstream-netbsd/usr.bin/grep/util.c b/toolbox/upstream-netbsd/usr.bin/grep/util.c index ecd948da4..a3c9e4c30 100644 --- a/toolbox/upstream-netbsd/usr.bin/grep/util.c +++ b/toolbox/upstream-netbsd/usr.bin/grep/util.c @@ -1,4 +1,4 @@ -/* $NetBSD: util.c,v 1.17 2013/01/21 03:24:43 msaitoh Exp $ */ +/* $NetBSD: util.c,v 1.19 2018/02/05 22:14:26 mrg Exp $ */ /* $FreeBSD: head/usr.bin/grep/util.c 211496 2010-08-19 09:28:59Z des $ */ /* $OpenBSD: util.c,v 1.39 2010/07/02 22:18:03 tedu Exp $ */ @@ -34,7 +34,7 @@ #endif #include -__RCSID("$NetBSD: util.c,v 1.17 2013/01/21 03:24:43 msaitoh Exp $"); +__RCSID("$NetBSD: util.c,v 1.19 2018/02/05 22:14:26 mrg Exp $"); #include #include @@ -478,9 +478,10 @@ printline(struct str *line, int sep, regmatch_t *matches, int m) if (color) fprintf(stdout, "\33[%sm\33[K", color); - fwrite(line->dat + matches[i].rm_so, - matches[i].rm_eo - matches[i].rm_so, 1, - stdout); + fwrite(line->dat + matches[i].rm_so, + matches[i].rm_eo - matches[i].rm_so, 1, + stdout); + if (color) fprintf(stdout, "\33[m\33[K"); a = matches[i].rm_eo;