summaryrefslogtreecommitdiffstats
path: root/src/map.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map.c')
-rw-r--r--src/map.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/map.c b/src/map.c
index ced6b73..33543df 100644
--- a/src/map.c
+++ b/src/map.c
@@ -557,7 +557,7 @@ map_next(struct plugin_state *state,
{
struct map *map;
struct map_entry *entry;
- unsigned int key_index;
+ unsigned int key_index, last_instance;
*next_key_len = 0;
*next_key = NULL;
*next_value_len = 0;
@@ -571,6 +571,18 @@ map_next(struct plugin_state *state,
if (entry == NULL) {
return FALSE;
}
+ last_instance = entry->n_keys - 1;
+ while (last_instance > key_index) {
+ if ((prev_len != entry->key_len[last_instance]) ||
+ (memcmp(prev, entry->keys[last_instance], prev_len) != 0)) {
+ last_instance--;
+ } else {
+ break;
+ }
+ }
+ if (last_instance > key_index) {
+ key_index = last_instance;
+ }
if (key_index + 1 < entry->n_keys) {
*next_key_len = entry->key_len[key_index + 1];
*next_key = entry->keys[key_index + 1];