Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Apr 2018 14:40:16 +0000 (UTC)
From:      Baptiste Daroussin <bapt@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r332995 - head/usr.bin/grep
Message-ID:  <201804251440.w3PEeGKH073447@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bapt
Date: Wed Apr 25 14:40:15 2018
New Revision: 332995
URL: https://svnweb.freebsd.org/changeset/base/332995

Log:
  Remove compression support from bsdgrep
  
  Compression support is now handled by an external script, remove it from the
  bsdgrep(1) utility.
  This removes the support for -Z -J -X and -M
  
  Note: that it matches the changes in newer GNU grep
  
  Reviewed by:	kevans
  Approved by:	kevans
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D15197

Modified:
  head/usr.bin/grep/Makefile
  head/usr.bin/grep/file.c
  head/usr.bin/grep/grep.1
  head/usr.bin/grep/grep.c
  head/usr.bin/grep/grep.h

Modified: head/usr.bin/grep/Makefile
==============================================================================
--- head/usr.bin/grep/Makefile	Wed Apr 25 14:21:13 2018	(r332994)
+++ head/usr.bin/grep/Makefile	Wed Apr 25 14:40:15 2018	(r332995)
@@ -69,20 +69,6 @@ MLINKS+= grep.1 egrep.1 \
 	grep.1 rgrep.1
 .endif
 
-LIBADD=	z
-
-.if ${MK_LZMA_SUPPORT} != "no"
-LIBADD+=	lzma
-.else
-CFLAGS+= -DWITHOUT_LZMA
-.endif
-
-.if ${MK_BZIP2_SUPPORT} != "no"
-LIBADD+=	bz2
-.else
-CFLAGS+= -DWITHOUT_BZIP2
-.endif
-
 .if ${MK_GNU_GREP_COMPAT} != "no"
 CFLAGS+= -I${SYSROOT:U${DESTDIR}}/usr/include/gnu -DWITH_GNU
 LIBADD+=	gnuregex

Modified: head/usr.bin/grep/file.c
==============================================================================
--- head/usr.bin/grep/file.c	Wed Apr 25 14:21:13 2018	(r332994)
+++ head/usr.bin/grep/file.c	Wed Apr 25 14:40:15 2018	(r332995)
@@ -49,31 +49,12 @@ __FBSDID("$FreeBSD$");
 #include <unistd.h>
 #include <wchar.h>
 #include <wctype.h>
-#include <zlib.h>
 
-#ifndef WITHOUT_LZMA
-#include <lzma.h>
-#endif
-
-#ifndef WITHOUT_BZIP2
-#include <bzlib.h>
-#endif
-
 #include "grep.h"
 
 #define	MAXBUFSIZ	(32 * 1024)
 #define	LNBUFBUMP	80
 
-static gzFile gzbufdesc;
-#ifndef WITHOUT_LZMA
-static lzma_stream lstrm = LZMA_STREAM_INIT;
-static lzma_action laction;
-static uint8_t lin_buf[MAXBUFSIZ];
-#endif
-#ifndef WITHOUT_BZIP2
-static BZFILE* bzbufdesc;
-#endif
-
 static unsigned char *buffer;
 static unsigned char *bufpos;
 static size_t bufrem;
@@ -86,9 +67,6 @@ static inline int
 grep_refill(struct file *f)
 {
 	ssize_t nr;
-#ifndef WITHOUT_LZMA
-	lzma_ret lzmaret;
-#endif
 
 	if (filebehave == FILE_MMAP)
 		return (0);
@@ -96,84 +74,7 @@ grep_refill(struct file *f)
 	bufpos = buffer;
 	bufrem = 0;
 
-	switch (filebehave) {
-	case FILE_GZIP:
-		nr = gzread(gzbufdesc, buffer, MAXBUFSIZ);
-		break;
-#ifndef WITHOUT_BZIP2
-	case FILE_BZIP:
-		if (bzbufdesc != NULL) {
-			int bzerr;
-
-			nr = BZ2_bzRead(&bzerr, bzbufdesc, buffer, MAXBUFSIZ);
-			switch (bzerr) {
-			case BZ_OK:
-			case BZ_STREAM_END:
-				/* No problem, nr will be okay */
-				break;
-			case BZ_DATA_ERROR_MAGIC:
-				/*
-				 * As opposed to gzread(), which simply returns the
-				 * plain file data, if it is not in the correct
-				 * compressed format, BZ2_bzRead() instead aborts.
-				 *
-				 * So, just restart at the beginning of the file again,
-				 * and use plain reads from now on.
-				 */
-				BZ2_bzReadClose(&bzerr, bzbufdesc);
-				bzbufdesc = NULL;
-				if (lseek(f->fd, 0, SEEK_SET) == -1)
-					return (-1);
-				nr = read(f->fd, buffer, MAXBUFSIZ);
-				break;
-			default:
-				/* Make sure we exit with an error */
-				nr = -1;
-			}
-		} else
-			/*
-			 * Also an error case; we should never have a scenario
-			 * where we have an open file but no bzip descriptor
-			 * at this point. See: grep_open
-			 */
-			nr = -1;
-		break;
-#endif
-#ifndef WITHOUT_LZMA
-	case FILE_XZ:
-	case FILE_LZMA:
-		lstrm.next_out = buffer;
-
-		do {
-			if (lstrm.avail_in == 0) {
-				lstrm.next_in = lin_buf;
-				nr = read(f->fd, lin_buf, MAXBUFSIZ);
-
-				if (nr < 0)
-					return (-1);
-				else if (nr == 0)
-					laction = LZMA_FINISH;
-
-				lstrm.avail_in = nr;
-			}
-
-			lzmaret = lzma_code(&lstrm, laction);
-
-			if (lzmaret != LZMA_OK && lzmaret != LZMA_STREAM_END)
-				return (-1);
-
-			if (lstrm.avail_out == 0 || lzmaret == LZMA_STREAM_END) {
-				bufrem = MAXBUFSIZ - lstrm.avail_out;
-				lstrm.next_out = buffer;
-				lstrm.avail_out = MAXBUFSIZ;
-			}
-		} while (bufrem == 0 && lzmaret != LZMA_STREAM_END);
-
-		return (0);
-#endif	/* WITHOUT_LZMA */
-	default:
-		nr = read(f->fd, buffer, MAXBUFSIZ);
-	}
+	nr = read(f->fd, buffer, MAXBUFSIZ);
 	if (nr < 0)
 		return (-1);
 
@@ -269,9 +170,6 @@ struct file *
 grep_open(const char *path)
 {
 	struct file *f;
-#ifndef WITHOUT_LZMA
-	lzma_ret lzmaret;
-#endif
 
 	f = grep_malloc(sizeof *f);
 	memset(f, 0, sizeof *f);
@@ -308,37 +206,6 @@ grep_open(const char *path)
 
 	if ((buffer == NULL) || (buffer == MAP_FAILED))
 		buffer = grep_malloc(MAXBUFSIZ);
-
-	switch (filebehave) {
-	case FILE_GZIP:
-		if ((gzbufdesc = gzdopen(f->fd, "r")) == NULL)
-			goto error2;
-		break;
-#ifndef WITHOUT_BZIP2
-	case FILE_BZIP:
-		if ((bzbufdesc = BZ2_bzdopen(f->fd, "r")) == NULL)
-			goto error2;
-		break;
-#endif
-#ifndef WITHOUT_LZMA
-	case FILE_XZ:
-	case FILE_LZMA:
-
-		if (filebehave == FILE_XZ)
-			lzmaret = lzma_stream_decoder(&lstrm, UINT64_MAX,
-			    LZMA_CONCATENATED);
-		else
-			lzmaret = lzma_alone_decoder(&lstrm, UINT64_MAX);
-
-		if (lzmaret != LZMA_OK)
-			goto error2;
-
-		lstrm.avail_in = 0;
-		lstrm.avail_out = MAXBUFSIZ;
-		laction = LZMA_RUN;
-		break;
-#endif
-	}
 
 	/* Fill read buffer, also catches errors early */
 	if (bufrem == 0 && grep_refill(f) != 0)

Modified: head/usr.bin/grep/grep.1
==============================================================================
--- head/usr.bin/grep/grep.1	Wed Apr 25 14:21:13 2018	(r332994)
+++ head/usr.bin/grep/grep.1	Wed Apr 25 14:40:15 2018	(r332995)
@@ -30,17 +30,16 @@
 .\"
 .\"	@(#)grep.1	8.3 (Berkeley) 4/18/94
 .\"
-.Dd April 17, 2017
+.Dd April 25, 2018
 .Dt GREP 1
 .Os
 .Sh NAME
 .Nm grep , egrep , fgrep , rgrep ,
-.Nm zgrep , zegrep , zfgrep
 .Nd file pattern searcher
 .Sh SYNOPSIS
 .Nm grep
 .Bk -words
-.Op Fl abcdDEFGHhIiJLlmnOopqRSsUVvwxZz
+.Op Fl abcdDEFGHhIiLlmnOopqRSsUVvwxz
 .Op Fl A Ar num
 .Op Fl B Ar num
 .Op Fl C Ns Op Ar num
@@ -88,21 +87,6 @@ but can only handle fixed patterns
 Patterns may consist of one or more lines,
 allowing any of the pattern lines to match a portion of the input.
 .Pp
-.Nm zgrep ,
-.Nm zegrep ,
-and
-.Nm zfgrep
-act like
-.Nm grep ,
-.Nm egrep ,
-and
-.Nm fgrep ,
-respectively, but accept input files compressed with the
-.Xr compress 1
-or
-.Xr gzip 1
-compression utilities.
-.Pp
 The following options are available:
 .Bl -tag -width indent
 .It Fl A Ar num , Fl Fl after-context Ns = Ns Ar num
@@ -274,10 +258,6 @@ Note that
 patterns take priority over
 .Fl Fl include-dir
 patterns.
-.It Fl J, Fl Fl bz2decompress
-Decompress the
-.Xr bzip2 1
-compressed file before looking for the text.
 .It Fl L , Fl Fl files-without-match
 Only the names of files not containing selected lines are written to
 standard output.
@@ -381,11 +361,6 @@ Obsoleted.
 .It Fl z , Fl Fl null-data
 Treat input and output data as sequences of lines terminated by a
 zero-byte instead of a newline.
-.It Fl Z , Fl Fl decompress
-Force
-.Nm grep
-to behave as
-.Nm zgrep .
 .It Fl Fl binary-files Ns = Ns Ar value
 Controls searching and printing of binary files.
 Options are
@@ -465,7 +440,6 @@ looking for either 19, 20, or 25.
 .Sh SEE ALSO
 .Xr ed 1 ,
 .Xr ex 1 ,
-.Xr gzip 1 ,
 .Xr sed 1 ,
 .Xr re_format 7
 .Sh STANDARDS

Modified: head/usr.bin/grep/grep.c
==============================================================================
--- head/usr.bin/grep/grep.c	Wed Apr 25 14:21:13 2018	(r332994)
+++ head/usr.bin/grep/grep.c	Wed Apr 25 14:40:15 2018	(r332995)
@@ -68,9 +68,8 @@ nl_catd	 catalog;
 const char	*errstr[] = {
 	"",
 /* 1*/	"(standard input)",
-/* 2*/	"cannot read bzip2 compressed file",
 /* 3*/	"unknown %s option",
-/* 4*/	"usage: %s [-abcDEFGHhIiJLlmnOoPqRSsUVvwxZz] [-A num] [-B num] [-C[num]]\n",
+/* 4*/	"usage: %s [-abcDEFGHhIiLlmnOoPqRSsUVvwxz] [-A num] [-B num] [-C[num]]\n",
 /* 5*/	"\t[-e pattern] [-f file] [--binary-files=value] [--color=when]\n",
 /* 6*/	"\t[--context[=num]] [--directories=action] [--label] [--line-buffered]\n",
 /* 7*/	"\t[--null] [pattern] [file ...]\n",
@@ -136,7 +135,7 @@ char	*label;		/* --label */
 const char *color;	/* --color */
 int	 grepbehave = GREP_BASIC;	/* -EFGP: type of the regex */
 int	 binbehave = BINFILE_BIN;	/* -aIU: handling of binary files */
-int	 filebehave = FILE_STDIO;	/* -JZ: normal, gzip or bzip2 file */
+int	 filebehave = FILE_STDIO;
 int	 devbehave = DEV_READ;		/* -D: handling of devices */
 int	 dirbehave = DIR_READ;		/* -dRr: handling of directories */
 int	 linkbehave = LINK_READ;	/* -OpS: handling of symlinks */
@@ -169,14 +168,14 @@ bool	 file_err;	/* file reading error */
 static void
 usage(void)
 {
-	fprintf(stderr, getstr(4), getprogname());
+	fprintf(stderr, getstr(3), getprogname());
+	fprintf(stderr, "%s", getstr(4));
 	fprintf(stderr, "%s", getstr(5));
 	fprintf(stderr, "%s", getstr(6));
-	fprintf(stderr, "%s", getstr(7));
 	exit(2);
 }
 
-static const char	*optstr = "0123456789A:B:C:D:EFGHIJMLOPSRUVZabcd:e:f:hilm:nopqrsuvwxXyz";
+static const char	*optstr = "0123456789A:B:C:D:EFGHILOPSRUVabcd:e:f:hilm:nopqrsuvwxyz";
 
 static const struct option long_options[] =
 {
@@ -208,11 +207,9 @@ static const struct option long_options[] =
 	{"no-filename",		no_argument,		NULL, 'h'},
 	{"with-filename",	no_argument,		NULL, 'H'},
 	{"ignore-case",		no_argument,		NULL, 'i'},
-	{"bz2decompress",	no_argument,		NULL, 'J'},
 	{"files-with-matches",	no_argument,		NULL, 'l'},
 	{"files-without-match", no_argument,            NULL, 'L'},
 	{"max-count",		required_argument,	NULL, 'm'},
-	{"lzma",		no_argument,		NULL, 'M'},
 	{"line-number",		no_argument,		NULL, 'n'},
 	{"only-matching",	no_argument,		NULL, 'o'},
 	{"quiet",		no_argument,		NULL, 'q'},
@@ -225,9 +222,7 @@ static const struct option long_options[] =
 	{"version",		no_argument,		NULL, 'V'},
 	{"word-regexp",		no_argument,		NULL, 'w'},
 	{"line-regexp",		no_argument,		NULL, 'x'},
-	{"xz",			no_argument,		NULL, 'X'},
 	{"null-data",		no_argument,		NULL, 'z'},
-	{"decompress",          no_argument,            NULL, 'Z'},
 	{NULL,			no_argument,		NULL, 0}
 };
 
@@ -367,21 +362,9 @@ main(int argc, char *argv[])
 	   way we can have all the funcionalities in one binary
 	   without the need of scripting and using ugly hacks. */
 	pn = getprogname();
-	if (pn[0] == 'b' && pn[1] == 'z') {
-		filebehave = FILE_BZIP;
-		pn += 2;
-	} else if (pn[0] == 'x' && pn[1] == 'z') {
-		filebehave = FILE_XZ;
-		pn += 2;
-	} else if (pn[0] == 'l' && pn[1] == 'z') {
-		filebehave = FILE_LZMA;
-		pn += 2;
-	} else if (pn[0] == 'r') {
+	if (pn[0] == 'r') {
 		dirbehave = DIR_RECURSE;
 		Hflag = true;
-	} else if (pn[0] == 'z') {
-		filebehave = FILE_GZIP;
-		pn += 1;
 	}
 	switch (pn[0]) {
 	case 'e':
@@ -490,7 +473,7 @@ main(int argc, char *argv[])
 			else if (strcasecmp(optarg, "read") == 0)
 				devbehave = DEV_READ;
 			else
-				errx(2, getstr(3), "--devices");
+				errx(2, getstr(2), "--devices");
 			break;
 		case 'd':
 			if (strcasecmp("recurse", optarg) == 0) {
@@ -501,7 +484,7 @@ main(int argc, char *argv[])
 			else if (strcasecmp("read", optarg) == 0)
 				dirbehave = DIR_READ;
 			else
-				errx(2, getstr(3), "--directories");
+				errx(2, getstr(2), "--directories");
 			break;
 		case 'E':
 			grepbehave = GREP_EXTENDED;
@@ -541,13 +524,6 @@ main(int argc, char *argv[])
 			iflag =  true;
 			cflags |= REG_ICASE;
 			break;
-		case 'J':
-#ifdef WITHOUT_BZIP2
-			errno = EOPNOTSUPP;
-			err(2, "bzip2 support was disabled at compile-time");
-#endif
-			filebehave = FILE_BZIP;
-			break;
 		case 'L':
 			lflag = false;
 			Lflag = true;
@@ -568,9 +544,6 @@ main(int argc, char *argv[])
 				err(2, NULL);
 			}
 			break;
-		case 'M':
-			filebehave = FILE_LZMA;
-			break;
 		case 'n':
 			nflag = true;
 			break;
@@ -607,9 +580,9 @@ main(int argc, char *argv[])
 			break;
 		case 'V':
 #ifdef WITH_GNU
-			printf(getstr(10), getprogname(), VERSION);
-#else
 			printf(getstr(9), getprogname(), VERSION);
+#else
+			printf(getstr(8), getprogname(), VERSION);
 #endif
 			exit(0);
 		case 'v':
@@ -623,15 +596,9 @@ main(int argc, char *argv[])
 			xflag = true;
 			cflags &= ~REG_NOSUB;
 			break;
-		case 'X':
-			filebehave = FILE_XZ;
-			break;
 		case 'z':
 			fileeol = '\0';
 			break;
-		case 'Z':
-			filebehave = FILE_GZIP;
-			break;
 		case BIN_OPT:
 			if (strcasecmp("binary", optarg) == 0)
 				binbehave = BINFILE_BIN;
@@ -640,7 +607,7 @@ main(int argc, char *argv[])
 			else if (strcasecmp("text", optarg) == 0)
 				binbehave = BINFILE_TEXT;
 			else
-				errx(2, getstr(3), "--binary-files");
+				errx(2, getstr(2), "--binary-files");
 			break;
 		case COLOR_OPT:
 			color = NULL;
@@ -660,7 +627,7 @@ main(int argc, char *argv[])
 			} else if (strcasecmp("never", optarg) != 0 &&
 			    strcasecmp("none", optarg) != 0 &&
 			    strcasecmp("no", optarg) != 0)
-				errx(2, getstr(3), "--color");
+				errx(2, getstr(2), "--color");
 			cflags &= ~REG_NOSUB;
 			break;
 		case LABEL_OPT:

Modified: head/usr.bin/grep/grep.h
==============================================================================
--- head/usr.bin/grep/grep.h	Wed Apr 25 14:21:13 2018	(r332994)
+++ head/usr.bin/grep/grep.h	Wed Apr 25 14:40:15 2018	(r332995)
@@ -69,10 +69,6 @@ extern const char		*errstr[];
 
 #define	FILE_STDIO	0
 #define	FILE_MMAP	1
-#define	FILE_GZIP	2
-#define	FILE_BZIP	3
-#define	FILE_XZ		4
-#define	FILE_LZMA	5
 
 #define	DIR_READ	0
 #define	DIR_SKIP	1



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201804251440.w3PEeGKH073447>