PERFORCE change 144014 for review
Gabor Kovesdan
gabor at FreeBSD.org
Tue Jun 24 09:03:01 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=144014
Change 144014 by gabor at gabor_server on 2008/06/24 09:02:45
- Use an easier to understand and cleaner layout for device,
directory and link actions
Inspired by: NetBSD Project
Affected files ...
.. //depot/projects/soc2008/gabor_textproc/grep/grep.c#38 edit
.. //depot/projects/soc2008/gabor_textproc/grep/grep.h#20 edit
.. //depot/projects/soc2008/gabor_textproc/grep/util.c#34 edit
Differences ...
==== //depot/projects/soc2008/gabor_textproc/grep/grep.c#38 (text+ko) ====
@@ -90,20 +90,15 @@
/* Command-line flags */
unsigned long long Aflag; /* -A x: print x lines trailing each match */
unsigned long long Bflag; /* -B x: print x lines leading each match */
-int Dflag; /* -D: do not process device files if optarg is passed */
int Eflag; /* -E: interpret pattern as extended regexp */
int Fflag; /* -F: interpret pattern as list of fixed strings */
int Gflag; /* -G: interpret pattern as basic regexp */
int Hflag; /* -H: always print file name */
int Jflag; /* -J: grep in bzipped file */
int Lflag; /* -L: only show names of files with no matches */
-int Oflag; /* -O: if -R, follow explicitly listed symlinks */
-int Pflag; /* -P: if -R, no symlinks are followed */
-int Rflag; /* -R: recursively search directory trees */
int Zflag; /* -Z: grep in gzipped file */
int bflag; /* -b: show block numbers for each match */
int cflag; /* -c: only show a count of matching lines */
-int dflag; /* -d: skip reading of directories */
int hflag; /* -h: don't print filename headers */
int iflag; /* -i: ignore case */
int lflag; /* -l: only show names of files with matches */
@@ -121,7 +116,10 @@
char *color; /* --color */
unsigned long long mcount; /* count for -m */
-int binbehave = BIN_FILE_BIN;
+int binbehave = BIN_FILE_BIN;
+int devbehave = DEV_GREP;
+int dirbehave = DIR_GREP;
+int linkbehave = LINK_GREP;
enum {
BIN_OPT = CHAR_MAX + 1,
@@ -443,14 +441,14 @@
break;
case 'D':
if (strcmp(optarg, "skip") == 0)
- Dflag = 1;
+ devbehave = DEV_SKIP;
break;
case 'd':
if (strcmp("recurse", optarg) == 0) {
Hflag++;
- Rflag++;
+ dirbehave = DIR_RECURSE;
} else if (strcmp("skip", optarg) == 0)
- dflag++;
+ dirbehave = DIR_SKIP;
else if (strcmp("read", optarg) != 0)
usage();
break;
@@ -513,23 +511,23 @@
nflag = 1;
break;
case 'O':
- Oflag++;
+ linkbehave = LINK_EXPLICIT;
break;
case 'o':
oflag++;
break;
case 'P':
- Pflag++;
+ linkbehave = LINK_SKIP;
break;
case 'q':
qflag = 1;
break;
case 'S':
- Pflag = 0;
+ linkbehave = LINK_GREP;
break;
case 'R':
case 'r':
- Rflag++;
+ dirbehave = DIR_RECURSE;
Hflag++;
break;
case 's':
@@ -645,11 +643,11 @@
if (argc == 0)
exit(!procfile(NULL));
- if (Rflag)
+ if (dirbehave == DIR_RECURSE)
c = grep_tree(argv);
else
for (c = 0; argc--; ++argv) {
- if (Dflag) {
+ if (devbehave == DEV_SKIP) {
if (!(finfo = malloc(sizeof(struct stat))))
err(2, NULL);
if (stat(*argv, finfo) == -1)
==== //depot/projects/soc2008/gabor_textproc/grep/grep.h#20 (text+ko) ====
@@ -49,6 +49,17 @@
#define BIN_FILE_SKIP 1
#define BIN_FILE_TEXT 2
+#define DIR_GREP 0
+#define DIR_SKIP 1
+#define DIR_RECURSE 2
+
+#define DEV_GREP 0
+#define DEV_SKIP 1
+
+#define LINK_GREP 0
+#define LINK_EXPLICIT 1
+#define LINK_SKIP 2
+
struct str {
size_t len;
int line_no;
@@ -72,13 +83,12 @@
extern int cflags, eflags;
/* Command line flags */
-extern int Dflag, Eflag, Fflag, Gflag, Hflag, Jflag,
- Lflag, Oflag, Pflag, Rflag, Zflag,
- bflag, cflag, dflag, hflag, iflag, lflag, mflag, nflag, oflag,
+extern int Eflag, Fflag, Gflag, Hflag, Jflag, Lflag, Zflag,
+ bflag, cflag, hflag, iflag, lflag, mflag, nflag, oflag,
qflag, sflag, vflag, wflag, xflag, nullflag;
extern unsigned long long Aflag, Bflag, mcount;
extern char *color, *label;
-extern int binbehave;
+extern int binbehave, devbehave, dirbehave, linkbehave;
extern int first, prev, matchall, patterns, tail, notfound;
extern char **pattern;
==== //depot/projects/soc2008/gabor_textproc/grep/util.c#34 (text+ko) ====
@@ -69,9 +69,9 @@
c = fts_flags = 0;
- if (Oflag)
+ if (linkbehave == LINK_EXPLICIT)
fts_flags = FTS_COMFOLLOW;
- if (Pflag)
+ if (linkbehave == LINK_SKIP)
fts_flags = FTS_PHYSICAL;
else
fts_flags = FTS_LOGICAL;
@@ -90,7 +90,7 @@
case FTS_DP:
break;
default:
- if (Dflag || Rflag || dflag) {
+ if ((devbehave == DEV_SKIP) || (dirbehave == DIR_RECURSE) || (dirbehave == DIR_SKIP)) {
struct stat *finfo;
if (!(finfo = malloc(sizeof(struct stat))))
@@ -98,14 +98,14 @@
if (stat(p->fts_path, finfo) == -1)
err(2, NULL);
- if (Dflag && (S_ISBLK(finfo->st_mode) ||
+ if ((devbehave == DEV_SKIP) && (S_ISBLK(finfo->st_mode) ||
S_ISCHR(finfo->st_mode) ||
S_ISFIFO(finfo->st_mode) ||
S_ISSOCK(finfo->st_mode))) {
free(finfo);
break;
}
- if ((Rflag || dflag) && S_ISDIR(finfo->st_mode)) {
+ if (((dirbehave == DIR_RECURSE) || (dirbehave == DIR_SKIP)) && S_ISDIR(finfo->st_mode)) {
free(finfo);
break;
}
More information about the p4-projects
mailing list