info: stop evaluating send_what when all information has been processed
authorFerry Huberts <ferry.huberts@pelagic.nl>
Tue, 12 Apr 2016 15:30:10 +0000 (17:30 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Wed, 13 Apr 2016 10:57:32 +0000 (12:57 +0200)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/info/olsrd_info.c

index 1a6b636..0a15cb3 100644 (file)
@@ -364,6 +364,7 @@ typedef struct {
 static void send_info_from_table(struct autobuf *abuf, unsigned int send_what, SiwLookupTableEntry *funcs, unsigned int funcsSize, unsigned int *outputLength) {
   unsigned int i;
   unsigned int preLength;
+  unsigned int what = send_what;
   cache_timeout_func cache_timeout_f = functions->cache_timeout;
 
   if (functions->output_start) {
@@ -372,9 +373,9 @@ static void send_info_from_table(struct autobuf *abuf, unsigned int send_what, S
 
   preLength = abuf->len;
 
-  for (i = 0; i < funcsSize; i++) {
+  for (i = 0; (i < funcsSize) && what; i++) {
     unsigned long long siw = funcs[i].siw;
-    if (send_what & siw) {
+    if (what & siw) {
       printer_generic func = funcs[i].func;
       if (func) {
         long cache_timeout = 0;
@@ -403,6 +404,7 @@ static void send_info_from_table(struct autobuf *abuf, unsigned int send_what, S
         }
       }
     }
+    what &= ~siw;
   }
 
   *outputLength = abuf->len - preLength;