mirror of
https://github.com/isar/libmdbx.git
synced 2025-02-01 13:38:21 +08:00
mdbx: fix mdbx_replace().
Always return `old_data`, even no changes.
This commit is contained in:
parent
9b38d8d422
commit
ef375647c7
11
mdbx.c
11
mdbx.c
@ -369,7 +369,7 @@ int mdbx_cursor_eof(MDB_cursor *mc)
|
|||||||
return (mc->mc_flags & C_INITIALIZED) ? 0 : 1;
|
return (mc->mc_flags & C_INITIALIZED) ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mdbx_is_samedata(MDB_val* a, MDB_val* b) {
|
static int mdbx_is_samedata(const MDB_val* a, const MDB_val* b) {
|
||||||
return a->iov_len == b->iov_len
|
return a->iov_len == b->iov_len
|
||||||
&& memcmp(a->iov_base, b->iov_base, a->iov_len) == 0;
|
&& memcmp(a->iov_base, b->iov_base, a->iov_len) == 0;
|
||||||
}
|
}
|
||||||
@ -462,14 +462,21 @@ int mdbx_replace(MDB_txn *txn, MDB_dbi dbi,
|
|||||||
goto bailout;
|
goto bailout;
|
||||||
}
|
}
|
||||||
/* если данные совпадают, то ничего делать не надо */
|
/* если данные совпадают, то ничего делать не надо */
|
||||||
if (new_data && mdbx_is_samedata(&present_data, new_data))
|
if (new_data && mdbx_is_samedata(&present_data, new_data)) {
|
||||||
|
*old_data = *new_data;
|
||||||
goto bailout;
|
goto bailout;
|
||||||
|
}
|
||||||
} else if ((flags & MDB_NODUPDATA) && mdbx_is_samedata(&present_data, new_data)) {
|
} else if ((flags & MDB_NODUPDATA) && mdbx_is_samedata(&present_data, new_data)) {
|
||||||
/* если данные совпадают и установлен MDB_NODUPDATA */
|
/* если данные совпадают и установлен MDB_NODUPDATA */
|
||||||
rc = MDB_KEYEXIST;
|
rc = MDB_KEYEXIST;
|
||||||
goto bailout;
|
goto bailout;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
/* если данные совпадают, то ничего делать не надо */
|
||||||
|
if (new_data && mdbx_is_samedata(&present_data, new_data)) {
|
||||||
|
*old_data = *new_data;
|
||||||
|
goto bailout;
|
||||||
|
}
|
||||||
flags |= MDB_CURRENT;
|
flags |= MDB_CURRENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user