packages: grepcidr/regex.diff (NEW) - from http://www.pc-tools.net/unix/gre...

gotar gotar at pld-linux.org
Mon Nov 2 18:12:00 CET 2009


Author: gotar                        Date: Mon Nov  2 17:12:00 2009 GMT
Module: packages                      Tag: HEAD
---- Log message:
- from http://www.pc-tools.net/unix/grepcidr/contrib-makey/

---- Files affected:
packages/grepcidr:
   regex.diff (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/grepcidr/regex.diff
diff -u /dev/null packages/grepcidr/regex.diff:1.1
--- /dev/null	Mon Nov  2 18:12:00 2009
+++ packages/grepcidr/regex.diff	Mon Nov  2 18:11:55 2009
@@ -0,0 +1,73 @@
+--- grepcidr.c.~1~	Sat Apr 23 15:00:16 2005
++++ grepcidr.c	Fri Apr 29 19:35:54 2005
+@@ -26,6 +26,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include "getopt.h"
++#include <regex.h>
+ 
+ #define EXIT_OK		0
+ #define EXIT_NOMATCH	1
+@@ -164,6 +165,7 @@
+ 	char line[MAXFIELD];
+ 	int foundopt;
+ 	int anymatch = 0;			/* did anything match? for exit code */
++	static regex_t preg;			/* compiled regular expression for IPs */
+ 
+ 	if (argc == 1)
+ 	{
+@@ -272,22 +274,35 @@
+ 		}
+ 	}
+ 	
++	/* Compile the regular expression for matching IP addresses */
++	if (regcomp(&preg, "[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+", REG_EXTENDED) != 0)
++	{
++		(void)fputs("regcomp() failed\n", stderr);
++		return EXIT_ERROR;
++	}
++
+ 	/* Match IPs from input stream to network patterns */
+ 	while (fgets(line, sizeof(line), inp_stream))
+ 	{
+ 		struct netspec key;
+-		if ((key.min=ip_to_uint(line)))
++		regoff_t offset;
++		regmatch_t pmatch;
++		for (offset = 0; regexec(&preg, &line[offset], 1, &pmatch, 0) == 0; offset += pmatch.rm_eo)
+ 		{
+-			int match = 0;
+-			if (bsearch(&key, array, patterns, sizeof(struct netspec), netsearch))
+-				match = 1;
+-			if (invert ^ match)
++			if ((key.min=ip_to_uint(&line[offset + pmatch.rm_so])))
+ 			{
+-				anymatch = 1;
+-				if (counting)
+-					counting++;
+-				else
+-					printf("%s", line);
++				int match = 0;
++				if (bsearch(&key, array, patterns, sizeof(struct netspec), netsearch))
++					match = 1;
++				if (invert ^ match)
++				{
++					anymatch = 1;
++					if (counting)
++						counting++;
++					else
++						printf("%s", line);
++					break;
++				}
+ 			}
+ 		}
+ 	}
+@@ -297,6 +312,7 @@
+ 		fclose(inp_stream);
+ 	if (array)
+ 		free(array);
++	regfree(&preg);
+ 
+ 	if (counting)
+ 		printf("%u\n", counting-1);
+
================================================================


More information about the pld-cvs-commit mailing list