Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Jun 2008 10:29:49 GMT
From:      Gabor Kovesdan <gabor@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 144082 for review
Message-ID:  <200806251029.m5PATneL071923@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=144082

Change 144082 by gabor@gabor_server on 2008/06/25 10:29:05

	- Remove the mmap code and apply some possible cleanups after the
	  removal. Using mmap is completely unnecessary as it doesn't bring us
	  any deliverables, just makes the code more complicated and
	  involves more cases.
	
	  Suggested by: ache

Affected files ...

.. //depot/projects/soc2008/gabor_textproc/grep/Makefile#7 edit
.. //depot/projects/soc2008/gabor_textproc/grep/binary.c#13 delete
.. //depot/projects/soc2008/gabor_textproc/grep/file.c#11 edit
.. //depot/projects/soc2008/gabor_textproc/grep/grep.c#45 edit
.. //depot/projects/soc2008/gabor_textproc/grep/grep.h#25 edit
.. //depot/projects/soc2008/gabor_textproc/grep/mmfile.c#5 delete
.. //depot/projects/soc2008/gabor_textproc/grep/util.c#39 edit

Differences ...

==== //depot/projects/soc2008/gabor_textproc/grep/Makefile#7 (text+ko) ====

@@ -2,7 +2,7 @@
 #	$OpenBSD: Makefile,v 1.6 2003/06/25 15:00:04 millert Exp $
 
 PROG=	grep
-SRCS=	binary.c file.c grep.c mmfile.c queue.c util.c
+SRCS=	file.c grep.c queue.c util.c
 LINKS=	${BINDIR}/grep ${BINDIR}/egrep \
 	${BINDIR}/grep ${BINDIR}/fgrep \
 	${BINDIR}/grep ${BINDIR}/zgrep \

==== //depot/projects/soc2008/gabor_textproc/grep/file.c#11 (text+ko) ====

@@ -42,21 +42,40 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <wchar.h>
+#include <wctype.h>
 #include <zlib.h>
 
 #include "grep.h"
 
 static char	 fname[MAXPATHLEN];
 
-#define FILE_STDIO	0
-#define FILE_MMAP	1
+#define iswbinary(ch)	(!iswspace((ch)) && iswcntrl((ch)))
+
+int
+bin_file(struct file *f)
+{
+	wint_t	 ch = L'\0';
+	size_t	 i;
+	int	 ret = 0;
+
+	if (f->noseek)
+		return (0);
+
+	if (fseek(f->f, 0L, SEEK_SET) == -1)
+		return (0);
+
+	for (i = 0; (i <= BUFSIZ) && (ch != WEOF); i++) {
+		ch = fgetwc(f->f);
+		if (iswbinary(ch)) {
+			ret = 1;
+			break;
+		}
+	}
 
-struct file {
-	int		 type;
-	int		 noseek;
-	FILE		*f;
-	struct mmfile	*mmf;
-};
+	rewind(f->f);
+	return (ret);
+}
 
 struct file *
 grep_stdin_open(void)
@@ -67,9 +86,8 @@
 
 	f = grep_malloc(sizeof *f);
 
-	f->type = FILE_STDIO;
-	f->noseek = isatty(FILE_STDIO);
-	if ((f->f = fdopen(FILE_STDIO, "r")) != NULL)
+	f->noseek = isatty(STDIN_FILENO);
+	if ((f->f = fdopen(STDIN_FILENO, "r")) != NULL)
 		return (f);
 
 	free(f);
@@ -106,7 +124,6 @@
 			}
 			gzclose(gzf);
 			lseek(tempfd, 0L, SEEK_SET);
-			f->type = FILE_STDIO;
 			if ((f->f = fdopen(tempfd, "r")) != NULL)
 				return (f);
 			else
@@ -128,7 +145,6 @@
 			BZ2_bzReadClose(&bzerror, bzf);
 			fclose(file);
 			lseek(tempfd, 0L, SEEK_SET);
-			f->type = FILE_STDIO;
 			if ((f->f = fdopen(tempfd, "r")) != NULL)
 				return (f);
 			else
@@ -136,63 +152,9 @@
 		}
 	}
 
-	/* try mmap first; if it fails, try stdio */
-	if ((f->mmf = mmopen(fname, "r")) != NULL) {
-		f->type = FILE_MMAP;
-		return (f);
-	}
-	f->type = FILE_STDIO;
 	if ((f->f = fopen(path, "r")) != NULL)
 		return (f);
 
 	free(f);
 	return (NULL);
 }
-
-int
-grep_bin_file(struct file *f)
-{
-	if (f->noseek)
-		return (0);
-
-	switch (f->type) {
-	case FILE_STDIO:
-		return (bin_file(f->f));
-	case FILE_MMAP:
-		return (mmbin_file(f->mmf));
-	default:
-		/* NOTREACHED */
-		errx(2, getstr(3));
-	}
-}
-
-char *
-grep_fgetln(struct file *f, size_t *l)
-{
-	switch (f->type) {
-	case FILE_STDIO:
-		return (fgetln(f->f, l));
-	case FILE_MMAP:
-		return (mmfgetln(f->mmf, l));
-	default:
-		/* NOTREACHED */
-		errx(2, getstr(3));
-	}
-}
-
-void
-grep_close(struct file *f)
-{
-	switch (f->type) {
-	case FILE_STDIO:
-		fclose(f->f);
-		break;
-	case FILE_MMAP:
-		mmclose(f->mmf);
-		break;
-	default:
-		/* NOTREACHED */
-		errx(2, getstr(3));
-	}
-	free(f);
-}

==== //depot/projects/soc2008/gabor_textproc/grep/grep.c#45 (text+ko) ====

@@ -540,7 +540,7 @@
 			break;
 		case 'u':
 		case MMAP_OPT:
-			/* default, compatibility */
+			/* noop, compatibility */
 			break;
 		case 'V':
 			printf(getstr(10));

==== //depot/projects/soc2008/gabor_textproc/grep/grep.h#25 (text+ko) ====

@@ -60,6 +60,12 @@
 #define LINK_EXPLICIT	1
 #define LINK_SKIP	2
 
+struct file {
+	int		 noseek;
+	FILE		*f;
+	struct mmfile	*mmf;
+};
+
 struct str {
 	size_t		 len;
 	int		 line_no;
@@ -115,26 +121,7 @@
 void	 printqueue(void);
 void	 clearqueue(void);
 
-/* mmfile.c */
-struct mmfile {
-	int	 fd;
-	size_t	 len;
-	char	*base, *end, *ptr;
-};
-
-struct mmfile	*mmopen(char *fn, char *mode);
-void		 mmclose(struct mmfile *mmf);
-char		*mmfgetln(struct mmfile *mmf, size_t *l);
-
 /* file.c */
-struct file;
-
+int		 bin_file(struct file * f);
 struct file	*grep_stdin_open(void);
 struct file	*grep_open(char *path);
-int		 grep_bin_file(struct file *f);
-char		*grep_fgetln(struct file *f, size_t *l);
-void		 grep_close(struct file *f);
-
-/* binary.c */
-int	 bin_file(FILE * f);
-int	 mmbin_file(struct mmfile *f);

==== //depot/projects/soc2008/gabor_textproc/grep/util.c#39 (text+ko) ====

@@ -147,9 +147,10 @@
 		return (0);
 	}
 
-	nottext = grep_bin_file(f);
+	nottext = bin_file(f);
 	if (nottext && binbehave == BINFILE_SKIP) {
-		grep_close(f);
+		fclose(f->f);
+		free(f);
 		return (0);
 	}
 
@@ -164,7 +165,7 @@
 		initqueue();
 	for (c = 0;  c == 0 || !(lflag || qflag); ) {
 		ln.off += ln.len + 1;
-		if ((ln.dat = grep_fgetln(f, &ln.len)) == NULL)
+		if ((ln.dat = fgetln(f->f, &ln.len)) == NULL)
 			break;
 		if (ln.len > 0 && ln.dat[ln.len - 1] == '\n')
 			--ln.len;
@@ -184,7 +185,8 @@
 	}
 	if (Bflag > 0)
 		clearqueue();
-	grep_close(f);
+	fclose(f->f);
+	free(f);
 
 	if (cflag) {
 		if (!hflag)



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