diff options
Diffstat (limited to 'common/storage_lmdb.cpp')
-rw-r--r-- | common/storage_lmdb.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index f0a5bc0..ae2be23 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp | |||
@@ -308,17 +308,19 @@ void Storage::scan(const char *keyData, uint keySize, | |||
308 | } | 308 | } |
309 | 309 | ||
310 | if (!keyData || keySize == 0) { | 310 | if (!keyData || keySize == 0) { |
311 | bool gotResult = false; | ||
311 | if ((rc = mdb_cursor_get(cursor, &key, &data, MDB_FIRST)) == 0 && | 312 | if ((rc = mdb_cursor_get(cursor, &key, &data, MDB_FIRST)) == 0 && |
312 | resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { | 313 | resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { |
313 | while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { | 314 | while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { |
315 | gotResult = true; | ||
314 | if (!resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { | 316 | if (!resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { |
315 | break; | 317 | break; |
316 | } | 318 | } |
317 | } | 319 | } |
318 | } | 320 | } |
319 | 321 | ||
320 | //We never find the last value | 322 | //We never find the last value, but ensure we got at least one. |
321 | if (rc == MDB_NOTFOUND) { | 323 | if (gotResult && rc == MDB_NOTFOUND) { |
322 | rc = 0; | 324 | rc = 0; |
323 | } | 325 | } |
324 | } else { | 326 | } else { |