mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-02-03 20:40:05 -05:00
ITS#8117 Fix MDB_INTEGERDUP keysize doc + md_dcmp
This commit is contained in:
parent
329e12e4c5
commit
9bb915675a
2 changed files with 25 additions and 16 deletions
|
|
@ -303,12 +303,12 @@ typedef void (MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *rel
|
|||
#define MDB_REVERSEKEY 0x02
|
||||
/** use sorted duplicates */
|
||||
#define MDB_DUPSORT 0x04
|
||||
/** numeric keys in native byte order.
|
||||
/** numeric keys in native byte order: either unsigned int or size_t.
|
||||
* The keys must all be of the same size. */
|
||||
#define MDB_INTEGERKEY 0x08
|
||||
/** with #MDB_DUPSORT, sorted dup items have fixed size */
|
||||
#define MDB_DUPFIXED 0x10
|
||||
/** with #MDB_DUPSORT, dups are numeric in native byte order */
|
||||
/** with #MDB_DUPSORT, dups are #MDB_INTEGERKEY-style integers */
|
||||
#define MDB_INTEGERDUP 0x20
|
||||
/** with #MDB_DUPSORT, use reverse string dups */
|
||||
#define MDB_REVERSEDUP 0x40
|
||||
|
|
@ -1074,9 +1074,9 @@ int mdb_txn_renew(MDB_txn *txn);
|
|||
* keys may have multiple data items, stored in sorted order.) By default
|
||||
* keys must be unique and may have only a single data item.
|
||||
* <li>#MDB_INTEGERKEY
|
||||
* Keys are binary integers in native byte order. Setting this option
|
||||
* requires all keys to be the same size, typically sizeof(int)
|
||||
* or sizeof(size_t).
|
||||
* Keys are binary integers in native byte order, either unsigned int
|
||||
* or size_t, and will be sorted as such.
|
||||
* The keys must all be of the same size.
|
||||
* <li>#MDB_DUPFIXED
|
||||
* This flag may only be used in combination with #MDB_DUPSORT. This option
|
||||
* tells the library that the data items for this database are all the same
|
||||
|
|
@ -1084,8 +1084,8 @@ int mdb_txn_renew(MDB_txn *txn);
|
|||
* all data items are the same size, the #MDB_GET_MULTIPLE and #MDB_NEXT_MULTIPLE
|
||||
* cursor operations may be used to retrieve multiple items at once.
|
||||
* <li>#MDB_INTEGERDUP
|
||||
* This option specifies that duplicate data items are also integers, and
|
||||
* should be sorted as such.
|
||||
* This option specifies that duplicate data items are binary integers,
|
||||
* similar to #MDB_INTEGERKEY keys.
|
||||
* <li>#MDB_REVERSEDUP
|
||||
* This option specifies that duplicate data items should be compared as
|
||||
* strings in reverse order.
|
||||
|
|
|
|||
|
|
@ -1328,6 +1328,13 @@ static int mdb_reader_check0(MDB_env *env, int rlocked, int *dead);
|
|||
static MDB_cmp_func mdb_cmp_memn, mdb_cmp_memnr, mdb_cmp_int, mdb_cmp_cint, mdb_cmp_long;
|
||||
/** @endcond */
|
||||
|
||||
/** Compare two items pointing at size_t's of unknown alignment. */
|
||||
#ifdef MISALIGNED_OK
|
||||
# define mdb_cmp_clong mdb_cmp_long
|
||||
#else
|
||||
# define mdb_cmp_clong mdb_cmp_cint
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
static SECURITY_DESCRIPTOR mdb_null_sd;
|
||||
static SECURITY_ATTRIBUTES mdb_all_sa;
|
||||
|
|
@ -1641,7 +1648,12 @@ mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b)
|
|||
int
|
||||
mdb_dcmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b)
|
||||
{
|
||||
return txn->mt_dbxs[dbi].md_dcmp(a, b);
|
||||
MDB_cmp_func *dcmp = txn->mt_dbxs[dbi].md_dcmp;
|
||||
#if UINT_MAX < SIZE_MAX
|
||||
if (dcmp == mdb_cmp_int && a->mv_size == sizeof(size_t))
|
||||
dcmp = mdb_cmp_clong;
|
||||
#endif
|
||||
return dcmp(a, b);
|
||||
}
|
||||
|
||||
/** Allocate memory for a page.
|
||||
|
|
@ -4891,7 +4903,11 @@ mdb_cmp_long(const MDB_val *a, const MDB_val *b)
|
|||
*(size_t *)a->mv_data > *(size_t *)b->mv_data;
|
||||
}
|
||||
|
||||
/** Compare two items pointing at aligned unsigned int's */
|
||||
/** Compare two items pointing at aligned unsigned int's.
|
||||
*
|
||||
* This is also set as #MDB_INTEGERDUP|#MDB_DUPFIXED's #MDB_dbx.%md_dcmp,
|
||||
* but #mdb_cmp_clong() is called instead if the data type is size_t.
|
||||
*/
|
||||
static int
|
||||
mdb_cmp_int(const MDB_val *a, const MDB_val *b)
|
||||
{
|
||||
|
|
@ -4929,13 +4945,6 @@ mdb_cmp_cint(const MDB_val *a, const MDB_val *b)
|
|||
#endif
|
||||
}
|
||||
|
||||
/** Compare two items pointing at size_t's of unknown alignment. */
|
||||
#ifdef MISALIGNED_OK
|
||||
# define mdb_cmp_clong mdb_cmp_long
|
||||
#else
|
||||
# define mdb_cmp_clong mdb_cmp_cint
|
||||
#endif
|
||||
|
||||
/** Compare two items lexically */
|
||||
static int
|
||||
mdb_cmp_memn(const MDB_val *a, const MDB_val *b)
|
||||
|
|
|
|||
Loading…
Reference in a new issue