mirror of
https://github.com/isar/libmdbx.git
synced 2025-08-19 19:39:26 +08:00
mdbx-test: fix keygen-related issue.
Fixes https://github.com/erthink/libmdbx/issues/127
This commit is contained in:
@@ -243,23 +243,25 @@ void maker::seek2end(serial_t &serial) const {
|
||||
serial = actor_params::serial_mask(mapping.width) - 1;
|
||||
}
|
||||
|
||||
bool maker::increment(serial_t &serial, int delta) const {
|
||||
bool maker::increment(serial_t &serial, int64_t delta) const {
|
||||
if (serial > actor_params::serial_mask(mapping.width)) {
|
||||
log_extra("keygen-increment: %" PRIu64 " > %" PRIu64 ", overflow", serial,
|
||||
actor_params::serial_mask(mapping.width));
|
||||
return false;
|
||||
}
|
||||
|
||||
serial_t target = serial + (int64_t)delta;
|
||||
serial_t target = serial + delta;
|
||||
if (target > actor_params::serial_mask(mapping.width) ||
|
||||
((delta > 0) ? target < serial : target > serial)) {
|
||||
log_extra("keygen-increment: %" PRIu64 "%-d => %" PRIu64 ", overflow",
|
||||
log_extra("keygen-increment: %" PRIu64 "%-" PRId64 " => %" PRIu64
|
||||
", overflow",
|
||||
serial, delta, target);
|
||||
return false;
|
||||
}
|
||||
|
||||
log_extra("keygen-increment: %" PRIu64 "%-d => %" PRIu64 ", continue", serial,
|
||||
delta, target);
|
||||
log_extra("keygen-increment: %" PRIu64 "%-" PRId64 " => %" PRIu64
|
||||
", continue",
|
||||
serial, delta, target);
|
||||
serial = target;
|
||||
return true;
|
||||
}
|
||||
|
@@ -130,8 +130,8 @@ public:
|
||||
bool is_unordered() const;
|
||||
void seek2end(serial_t &serial) const;
|
||||
|
||||
bool increment(serial_t &serial, int delta) const;
|
||||
bool increment_key_part(serial_t &serial, int delta,
|
||||
bool increment(serial_t &serial, int64_t delta) const;
|
||||
bool increment_key_part(serial_t &serial, int64_t delta,
|
||||
bool reset_value_part = true) const {
|
||||
if (reset_value_part) {
|
||||
serial_t value_part_bits = ((serial_t(1) << mapping.split) - 1);
|
||||
@@ -139,7 +139,7 @@ public:
|
||||
if (delta >= 0)
|
||||
serial &= ~value_part_bits;
|
||||
}
|
||||
return increment(serial, delta << mapping.split);
|
||||
return increment(serial, int64_t(uint64_t(delta) << mapping.split));
|
||||
}
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user