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