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);
+
================================================================
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to