diff options
-rw-r--r-- | include/libwapcaplet/libwapcaplet.h | 4 | ||||
-rw-r--r-- | src/libwapcaplet.c | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/include/libwapcaplet/libwapcaplet.h b/include/libwapcaplet/libwapcaplet.h index d8cc841..e4c2cc9 100644 --- a/include/libwapcaplet/libwapcaplet.h +++ b/include/libwapcaplet/libwapcaplet.h @@ -278,6 +278,10 @@ static inline lwc_error lwc_string_caseless_hash_value( /** * Iterate the context and return every string in it. * + * If there are no strings found in the context, then this has the + * side effect of removing the global context which will reduce the + * chances of false-positives on leak checkers. + * * @param cb The callback to give the string to. * @param pw The private word for the callback. */ diff --git a/src/libwapcaplet.c b/src/libwapcaplet.c index 9bc1fc9..34a72cd 100644 --- a/src/libwapcaplet.c +++ b/src/libwapcaplet.c @@ -271,12 +271,22 @@ lwc_iterate_strings(lwc_iteration_callback_fn cb, void *pw) { lwc_hash n; lwc_string *str; + bool found = false; if (ctx == NULL) return; for (n = 0; n < ctx->bucketcount; ++n) { - for (str = ctx->buckets[n]; str != NULL; str = str->next) + for (str = ctx->buckets[n]; str != NULL; str = str->next) { + found = true; cb(str, pw); + } + } + + if (found == false) { + /* We found no strings, so remove the global context. */ + free(ctx->buckets); + free(ctx); + ctx = NULL; } } |