diff options
Diffstat (limited to 'src/map.c')
-rw-r--r-- | src/map.c | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -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]; |