Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Jul 2008 08:42:26 GMT
From:      Gabor Kovesdan <gabor@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 145682 for review
Message-ID:  <200807230842.m6N8gQfb045717@repoman.freebsd.org>

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

Change 145682 by gabor@gabor_server on 2008/07/23 08:41:57

	- Add comments to the code

Affected files ...

.. //depot/projects/soc2008/gabor_textproc/grep/file.c#22 edit
.. //depot/projects/soc2008/gabor_textproc/grep/grep.c#70 edit
.. //depot/projects/soc2008/gabor_textproc/grep/util.c#66 edit

Differences ...

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

@@ -50,13 +50,14 @@
 
 #include "grep.h"
 
-static char	 fname[MAXPATHLEN];
+static char	 fname[MAXPATHLEN];	/* file name */
+
+/* Some global variable for the buffering and reading. */
 static char	*lnbuf;
 static size_t	 lnbuflen;
 static char	 binbuf[BUFSIZ * 4];
 static int	 binbufsiz;
 char		*binbufptr;
-
 static int	 bzerr;
 
 #define iswbinary(ch)	(!iswspace((ch)) && iswcntrl((ch)) && (ch != L'\b') && (ch != L'\0'))
@@ -123,7 +124,9 @@
 	const char	*src = binbuf;
 	mbstate_t	 mbs;
 
+	/* Fill in the buffer if it is empty. */
 	if (binbufptr == NULL) {
+		/* Only pre-read to the buffer if we need the binary check. */
 		if (binbehave != BINFILE_TEXT) {
 			for (; i < (BUFSIZ * sizeof(wint_t)); i++) {
 				if (grep_feof(f))
@@ -134,6 +137,8 @@
 			binbufsiz = i;
 			binbufptr = binbuf;
 
+			/* Convert at most (BUFSIZ * sizeof(wint_t)) characters or
+				(BUFSIZ - 1) bytes to wide character string. */
 			size = mbsnrtowcs(wbinbuf, &src, BUFSIZ * sizeof(wint_t), BUFSIZ - 1, &mbs);
 			f->binary = 0;
 			for (; size > 0; size--)
@@ -148,6 +153,7 @@
 		}
 	}
 
+	/* Read a line whether from the buffer or from the file itself. */
 	for (i = 0; ; i++) {
 		if (binbufptr == &binbuf[binbufsiz]) {
 			if (grep_feof(f))
@@ -166,7 +172,7 @@
 		lnbuf[i] = ch;
 	}
 	if (grep_feof(f) && (i == 0))
-		return NULL;
+		return (NULL);
 	*len = i;
 	return (lnbuf);
 }

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

@@ -85,7 +85,8 @@
 int		 cflags;
 int		 eflags = REG_STARTEND;
 
-int		 matchall;	/* shortcut */
+/* Shortcut for matching all cases like empty regex */
+int		 matchall;
 
 /* Searching patterns */
 int		 patterns, pattern_sz;
@@ -113,6 +114,7 @@
 int	 iflag;		/* -i: ignore case */
 int	 lflag;		/* -l: only show names of files with matches */
 int	 mflag;		/* -m x: stop reading the files after x matches */
+unsigned long long mcount;	/* count for -m */
 int	 nflag;		/* -n: show line numbers in front of matching lines */
 int	 oflag;		/* -o: print only matching part */
 int	 qflag;		/* -q: quiet mode (don't output anything) */
@@ -126,15 +128,13 @@
 int	 inclflag;	/* --include */
 char	*label;		/* --label */
 char	*color;		/* --color */
-unsigned long long mcount;	/* count for -m */
+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	 devbehave = DEV_GREP;		/* -D: handling of devices */
+int	 dirbehave = DIR_GREP;		/* -dRr: handling of directories */
+int	 linkbehave = LINK_GREP;	/* -OpS: handling of symlinks */
 
-int	 grepbehave = GREP_BASIC;
-int	 binbehave = BINFILE_BIN;
-int	 filebehave = FILE_STDIO;
-int	 devbehave = DEV_GREP;
-int	 dirbehave = DIR_GREP;
-int	 linkbehave = LINK_GREP;
-
 enum {
 	BIN_OPT = CHAR_MAX + 1,
 	COLOR_OPT,
@@ -226,11 +226,13 @@
 static void
 add_pattern(char *pat, size_t len)
 {
+
+	/* Check if we can do a shortcut */
 	if (len == 0 || matchall) {
 		matchall = 1;
 		return;
 	}
-
+	/* Increase size if necessary */
 	if (patterns == pattern_sz) {
 		pattern_sz *= 2;
 		pattern = grep_realloc(pattern, ++pattern_sz * sizeof(*pattern));
@@ -268,6 +270,8 @@
 static void
 add_epattern(char *pat, size_t len)
 {
+
+	/* Increase size if necessary */
 	if (epatterns == epattern_sz) {
 		epattern_sz *= 2;
 		epattern = grep_realloc(epattern, ++epattern_sz * sizeof(*epattern));
@@ -312,6 +316,9 @@
 	catalog = catopen("grep", NL_CAT_LOCALE);
 #endif
 
+	/* Check what is the program name of the binary.  In this
+	   way we can have all the funcionalities in one binary
+	   without the need of scripting and using ugly hacks. */
 	switch (__progname[0]) {
 	case 'e':
 		grepbehave = GREP_EXTENDED;
@@ -549,9 +556,11 @@
 	argc -= optind;
 	argv += optind;
 
+	/* Fail if we don't have any pattern */
 	if (argc == 0 && needpattern)
 		usage();
 
+	/* Process patterns from command line */
 	if (argc != 0 && needpattern) {
 		add_pattern(*argv, strlen(*argv));
 		--argc;
@@ -580,6 +589,7 @@
 		usage();
 	}
 	if (grepbehave != GREP_PERL) {
+		/* Compile regexes with regcomp() */
 		r_pattern = grep_calloc(patterns, sizeof(*r_pattern));
 		for (i = 0; i < patterns; ++i) {
 			c = regcomp(&r_pattern[i], pattern[i], cflags);
@@ -591,6 +601,7 @@
 		}
 	} else {
 #ifdef WITH_PCRE
+		/* Compile Perl regexes with pcre_compile() */
 		perl_pattern = grep_calloc(patterns, sizeof(perl_pattern));
 		for (i = 0; i < patterns; ++i) {
 			char	**err_msg = NULL;
@@ -624,6 +635,8 @@
 	catclose(catalog);
 #endif
 
+	/* Find out the correct return value according to the
+	   results and the command line option. */
 	if (c) {
 		if (notfound && qflag)
 			exit(0);

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

@@ -91,10 +91,12 @@
 		case FTS_D:
 			break;
 		case FTS_DC:
+			/* Print a warning if there is a recursive directory loop */
 			warnx("warning: %s: recursive directory loop",
 				p->fts_path);
 			break;
 		default:
+			/* Check for file exclusion/inclusion */
 			if (exclflag) {
 				ok = 1;
 				for (i = 0; i < epatterns; ++i)
@@ -146,6 +148,7 @@
 		f = grep_stdin_open();
 	} else {
 		if (!stat(fn, &sb)) {
+			/* Check if we need to process the file */
 			s = sb.st_mode & S_IFMT;
 			if (s == S_IFDIR && dirbehave == DIR_SKIP)
 				return (0);
@@ -180,17 +183,19 @@
 			--ln.len;
 		ln.line_no++;
 
+		/* Return if we need to skip a binary file */
 		if (f->binary && binbehave == BINFILE_SKIP) {
 			grep_close(f);
 			return (0);
 		}
-
+		/* Process the file line-by-line */
 		if ((t = procline(&ln, f->binary)) == 0 && Bflag > 0) {
 			enqueue(&ln);
 			linesqueued++;
 		}
 		c += t;
 
+		/* Count the matches if we have a match limit */
 		if (mflag) {
 			mcount -= t;
 			if (mcount <= 0)
@@ -240,10 +245,12 @@
 	if (!matchall) {
 		t = vflag ? REG_NOMATCH : 0;
 
+		/* Loop to process the whole line */
 		while (st <= l->len) {
 			pmatch.rm_so = st;
 			pmatch.rm_eo = l->len;
 
+			/* Loop to compare with all the patterns */
 			for (i = 0; i < patterns; i++) {
 				if (grepbehave != GREP_PERL) {
 					r = regexec(&r_pattern[i], l->dat, 1, &pmatch, eflags);
@@ -260,9 +267,11 @@
 				}
 				if (r == REG_NOMATCH && t == 0)
 					continue;
+				/* Check for full match */
 				if (r == 0 && xflag)
 					if (pmatch.rm_so != 0 || pmatch.rm_eo != l->len)
 						r = REG_NOMATCH;
+				/* Check for whole word match */
 				if (r == 0 && wflag && pmatch.rm_so != 0 && pmatch.rm_eo != l->len) {
 					wchar_t	*wbegin;
 					wint_t	 wend;
@@ -297,6 +306,7 @@
 	if (c && binbehave == BINFILE_BIN && nottext)
 		return (c); /* Binary file */
 
+	/* Dealing with the context */
 	if ((tail || (c && !vflag)) && !cflag && !qflag) {
 		if (c) {
 			if (!first && !prev && !tail && Aflag)
@@ -394,6 +404,7 @@
 	}
 	if (n)
 		putchar(sep);
+	/* --color and -o */
 	if ((oflag || color) && m > 0) {
 		for (i = 0; i < m; i++) {
 			if (!oflag)



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