Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Feb 2009 01:19:47 GMT
From:      Gabor Kovesdan <gabor@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 158046 for review
Message-ID:  <200902220119.n1M1JljJ020105@repoman.freebsd.org>

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

Change 158046 by gabor@gabor_server on 2009/02/22 01:19:13

	- Add support for GREP_OPTIONS
	
	Requested by:	obrien

Affected files ...

.. //depot/projects/soc2008/gabor_textproc/grep/grep.c#81 edit

Differences ...

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

@@ -293,6 +293,8 @@
 	int		 c, lastc, prevoptind, newarg, i, needpattern;
 	char		*ep;
 	unsigned long long l;
+	char		**eargv, **aargv, *eopts;
+	int		 eargc, aargc;
 
 	setlocale(LC_ALL, "");
 
@@ -333,8 +335,45 @@
 	newarg = 1;
 	prevoptind = 1;
 	needpattern = 1;
-	while ((c = getopt_long(argc, argv, optstr,
-				long_options, NULL)) != -1) {
+
+	eopts = getenv("GREP_OPTIONS");
+
+	eargc = 1;
+	if (eopts != NULL) {
+		char	*str;
+
+		for(i = 0; i < strlen(eopts); i++)
+			if (eopts[i] == ' ')
+				eargc++;
+
+		eargv = (char **)grep_malloc(sizeof(char *) * (eargc + 1));
+
+		str = strtok(eopts, " ");
+		eargc = 0;
+
+		while(str != NULL) {
+			eargv[++eargc] = (char *)grep_malloc(sizeof(char) * (strlen(str) + 1));
+			strlcpy(eargv[eargc], str, strlen(str) + 1);
+			str = strtok(NULL, " ");
+		}
+		eargv[++eargc] = NULL;
+
+		aargv = (char **)grep_malloc(sizeof(char *) * (eargc + argc + 1));
+		aargv[0] = argv[0];
+
+		for(i = 1; i < eargc; i++)
+			aargv[i] = eargv[i];
+		for(int j = 1; j < argc; j++)
+			aargv[i++] = argv[j];
+
+		aargc = eargc + argc - 1;
+
+	} else {
+		aargv = argv;
+		aargc = argc;
+	}
+
+	while (((c = getopt_long(aargc, aargv, optstr, long_options, NULL)) != -1)) {
 		switch (c) {
 		case '0': case '1': case '2': case '3': case '4':
 		case '5': case '6': case '7': case '8': case '9':
@@ -536,18 +575,18 @@
 		newarg = optind != prevoptind;
 		prevoptind = optind;
 	}
-	argc -= optind;
-	argv += optind;
+	aargc -= optind;
+	aargv += optind;
 
 	/* Fail if we don't have any pattern */
-	if (argc == 0 && needpattern)
+	if (aargc == 0 && needpattern)
 		usage();
 
 	/* Process patterns from command line */
-	if (argc != 0 && needpattern) {
-		add_pattern(*argv, strlen(*argv));
-		--argc;
-		++argv;
+	if (aargc != 0 && needpattern) {
+		add_pattern(*aargv, strlen(*aargv));
+		--aargc;
+		++aargv;
 	}
 
 	switch (grepbehave) {
@@ -588,17 +627,19 @@
 	if (lbflag)
 		setlinebuf(stdout);
 
-	if ((argc == 0 || argc == 1) && !Hflag)
+	if ((aargc == 0 || aargc == 1) && !Hflag)
 		hflag = 1;
 
-	if (argc == 0)
+	if (aargc == 0)
 		exit(!procfile("-"));
 
 	if (dirbehave == DIR_RECURSE)
-		c = grep_tree(argv);
+		c = grep_tree(aargv);
 	else 
-		for (c = 0; argc--; ++argv)
-			c+= procfile(*argv);
+		for (c = 0; aargc--; ++aargv) {
+			printf("aargc: %d\n", aargc);
+			c+= procfile(*aargv);
+		}
 
 #ifndef WITHOUT_NLS
 	catclose(catalog);



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