]> git.ipfire.org Git - thirdparty/xtables-addons.git/commitdiff
xt_psd: avoid if (c=h) do {..} while (c = c->next)
authorFlorian Westphal <fw@strlen.de>
Thu, 16 Aug 2012 10:01:09 +0000 (12:01 +0200)
committerJan Engelhardt <jengelh@inai.de>
Mon, 17 Sep 2012 02:42:56 +0000 (04:42 +0200)
It is aquivalent to c=h; while (c) { ..; c = c->next; }
which is a bit easier to read.

extensions/xt_psd.c

index 1f4fd4fdc1518a0e14726d482d2c594f90345206..197dbf9d8ec85db1c26fd79001c06bc3c280489e 100644 (file)
@@ -163,8 +163,8 @@ xt_psd_match(const struct sk_buff *pskb, struct xt_action_param *match)
        u_int16_t src_port,dest_port;
        u_int8_t proto;
        unsigned long now;
-       struct host *curr, *last, **head;
-       int hash, count;
+       struct host *curr, *last = NULL, **head;
+       int hash, count = 0;
        /* Parameters from userspace */
        const struct xt_psd_info *psdinfo = match->matchinfo;
 
@@ -205,20 +205,21 @@ xt_psd_match(const struct sk_buff *pskb, struct xt_action_param *match)
        }
 
        now = jiffies;
+       hash = hashfunc(addr);
+       head = &state.hash[hash];
 
        spin_lock(&state.lock);
 
        /* Do we know this source address already? */
-       count = 0;
-       last = NULL;
-       if ((curr = *(head = &state.hash[hash = hashfunc(addr)])) != NULL)
-               do {
-                       if (curr->src_addr.s_addr == addr.s_addr)
-                               break;
-                       count++;
-                       if (curr->next != NULL)
-                               last = curr;
-               } while ((curr = curr->next) != NULL);
+       curr = *head;
+       while (curr != NULL) {
+               if (curr->src_addr.s_addr == addr.s_addr)
+                       break;
+               count++;
+               if (curr->next != NULL)
+                       last = curr;
+               curr = curr->next;
+       }
 
        if (curr != NULL) {
                /* We know this address, and the entry isn't too old. Update it. */
@@ -266,12 +267,13 @@ xt_psd_match(const struct sk_buff *pskb, struct xt_action_param *match)
        else
                head = &last;
        last = NULL;
-       if ((curr = *head) != NULL)
-               do {
-                       if (curr == &state.list[state.index])
-                               break;
-                       last = curr;
-               } while ((curr = curr->next) != NULL);
+       curr = *head;
+       while (curr != NULL) {
+               if (curr == &state.list[state.index])
+                       break;
+               last = curr;
+               curr = curr->next;
+       }
 
        /* Then, remove it */
        if (curr != NULL) {