]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
FIB walk macros now allow continue from the loop
authorKaterina Kubecova <katerina.kubecova@nic.cz>
Thu, 2 Nov 2023 13:28:50 +0000 (14:28 +0100)
committerMaria Matejka <mq@ucw.cz>
Thu, 2 Nov 2023 13:37:27 +0000 (14:37 +0100)
lib/fib.h

index bec2a8d4bdfecdcfeec3fcd9714e1464aa5fb20f..1fbcec5f99ca67031e8f962ab2d1b2a3291e27e6 100644 (file)
--- a/lib/fib.h
+++ b/lib/fib.h
@@ -94,17 +94,16 @@ void fit_copy(struct fib *f, struct fib_iterator *dst, struct fib_iterator *src)
        uint count_ = (fib)->hash_size;                         \
        uint hpos_ = (it)->hash;                                \
        type *z;                                                \
-       for(;;) {                                               \
-         if (!fn_)                                             \
+       for(;;fn_ = fn_->next) {                                \
+         while (!fn_ && ++hpos_ < count_)                      \
            {                                                   \
-              if (++hpos_ >= count_)                           \
-                break;                                         \
               fn_ = (fib)->hash_table[hpos_];                  \
-              continue;                                        \
            }                                                   \
+         if (hpos_ >= count_)                                  \
+           break;                                              \
          z = fib_node_to_user(fib, fn_);
 
-#define FIB_ITERATE_END fn_ = fn_->next; } } while(0)
+#define FIB_ITERATE_END } } while(0)
 
 #define FIB_ITERATE_PUT(it) fit_put(it, fn_)