gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r30419 - gnunet/src/tun


From: gnunet
Subject: [GNUnet-SVN] r30419 - gnunet/src/tun
Date: Sat, 26 Oct 2013 16:57:24 +0200

Author: grothoff
Date: 2013-10-26 16:57:24 +0200 (Sat, 26 Oct 2013)
New Revision: 30419

Modified:
   gnunet/src/tun/regex.c
   gnunet/src/tun/test_regex.c
Log:
-faster port range generation, O(n) instead of O(n^2)

Modified: gnunet/src/tun/regex.c
===================================================================
--- gnunet/src/tun/regex.c      2013-10-26 14:34:39 UTC (rev 30418)
+++ gnunet/src/tun/regex.c      2013-10-26 14:57:24 UTC (rev 30419)
@@ -186,8 +186,9 @@
 {
   char *reg;
   char *ret;
-  char *tmp;
+  char *pos;
   unsigned int i;
+  unsigned int cnt;
 
   if ( (0 == pp->start_port) ||
        ( (1 == pp->start_port) &&
@@ -202,27 +203,31 @@
                      pp->start_port);
     return ret;
   }
-  reg = NULL;
+  cnt = pp->end_port - pp->start_port + 1;
+  if (GNUNET_YES == pp->negate_portrange)
+    cnt = 0xFFFF - cnt;
+  reg = GNUNET_malloc (cnt * 5 + 1);
+  pos = reg;
   for (i=1;i<=0xFFFF;i++)
   {
     if ( ( (i >= pp->start_port) && (i <= pp->end_port) ) ^
          (GNUNET_YES == pp->negate_portrange) )
     {
-      if (NULL == reg)
+      if (pos == reg)
       {
-        GNUNET_asprintf (&tmp,
+        GNUNET_snprintf (pos,
+                         5,
                          "%04X",
                          i);
       }
       else
       {
-        GNUNET_asprintf (&tmp,
-                         "%s|%04X",
-                         reg,
+        GNUNET_snprintf (pos,
+                         6,
+                         "|%04X",
                          i);
-        GNUNET_free (reg);
       }
-      reg = tmp;
+      pos += strlen (pos);
     }
   }
   GNUNET_asprintf (&ret,

Modified: gnunet/src/tun/test_regex.c
===================================================================
--- gnunet/src/tun/test_regex.c 2013-10-26 14:34:39 UTC (rev 30418)
+++ gnunet/src/tun/test_regex.c 2013-10-26 14:57:24 UTC (rev 30419)
@@ -121,12 +121,17 @@
 int
 main (int argc, char *argv[])
 {
-  GNUNET_log_setup ("test-regex", "WARNING", NULL);
-
   int error;
+  char *r;
 
+  GNUNET_log_setup ("test-regex", "WARNING", NULL);
   error = 0;
 
+  /* this is just a performance test ... */
+  r = GNUNET_TUN_ipv4policy2regex ("1.2.3.4/16:!25;");
+  GNUNET_break (NULL != r);
+  GNUNET_free (r);
+
   error +=
     test_iptoregex ("192.1.2.3", 2086,
                     "4-0826-C0010203",




reply via email to

[Prev in Thread] Current Thread [Next in Thread]