Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joe Martin
OpenLDAP
Commits
03432c5c
Commit
03432c5c
authored
May 04, 2015
by
Quanah Gibson-Mount
Browse files
Merge remote-tracking branch 'origin/mdb.RE/0.9' into OPENLDAP_REL_ENG_2_4
parents
98f70f18
6bd97d42
Changes
1
Hide whitespace changes
Inline
Side-by-side
libraries/liblmdb/mdb.c
View file @
03432c5c
...
...
@@ -5752,15 +5752,21 @@ set1:
return
rc
;
}
}
else
if
(
op
==
MDB_GET_BOTH
||
op
==
MDB_GET_BOTH_RANGE
)
{
MDB_val
d2
;
if
((
rc
=
mdb_node_read
(
mc
->
mc_txn
,
leaf
,
&
d2
))
!=
MDB_SUCCESS
)
MDB_val
olddata
;
MDB_cmp_func
*
dcmp
;
if
((
rc
=
mdb_node_read
(
mc
->
mc_txn
,
leaf
,
&
olddata
))
!=
MDB_SUCCESS
)
return
rc
;
rc
=
mc
->
mc_dbx
->
md_dcmp
(
data
,
&
d2
);
dcmp
=
mc
->
mc_dbx
->
md_dcmp
;
#if UINT_MAX < SIZE_MAX
if
(
dcmp
==
mdb_cmp_int
&&
olddata
.
mv_size
==
sizeof
(
size_t
))
dcmp
=
mdb_cmp_clong
;
#endif
rc
=
dcmp
(
data
,
&
olddata
);
if
(
rc
)
{
if
(
op
==
MDB_GET_BOTH
||
rc
>
0
)
return
MDB_NOTFOUND
;
rc
=
0
;
*
data
=
d2
;
*
data
=
olddata
;
}
}
else
{
...
...
@@ -6270,16 +6276,17 @@ more:
/* Was a single item before, must convert now */
if
(
!
F_ISSET
(
leaf
->
mn_flags
,
F_DUPDATA
))
{
MDB_cmp_func
*
dcmp
;
/* Just overwrite the current item */
if
(
flags
==
MDB_CURRENT
)
goto
current
;
dcmp
=
mc
->
mc_dbx
->
md_dcmp
;
#if UINT_MAX < SIZE_MAX
if
(
mc
->
mc_dbx
->
md_
dcmp
==
mdb_cmp_int
&&
olddata
.
mv_size
==
sizeof
(
size_t
))
mc
->
mc_dbx
->
md_
dcmp
=
mdb_cmp_clong
;
if
(
dcmp
==
mdb_cmp_int
&&
olddata
.
mv_size
==
sizeof
(
size_t
))
dcmp
=
mdb_cmp_clong
;
#endif
/* does data match? */
if
(
!
mc
->
mc_dbx
->
md_
dcmp
(
data
,
&
olddata
))
{
if
(
!
dcmp
(
data
,
&
olddata
))
{
if
(
flags
&
MDB_NODUPDATA
)
return
MDB_KEYEXIST
;
/* overwrite it */
...
...
@@ -7076,15 +7083,13 @@ mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node)
mx
->
mx_db
.
md_flags
|=
MDB_INTEGERKEY
;
}
}
#if UINT_MAX < SIZE_MAX
if
(
mc
->
mc_dbx
->
md_dcmp
==
mdb_cmp_int
&&
mx
->
mx_db
.
md_pad
==
sizeof
(
size_t
))
{
mc
->
mc_dbx
->
md_dcmp
=
mdb_cmp_clong
;
mx
->
mx_dbx
.
md_cmp
=
mdb_cmp_clong
;
}
#endif
DPRINTF
((
"Sub-db -%u root page %"
Z
"u"
,
mx
->
mx_cursor
.
mc_dbi
,
mx
->
mx_db
.
md_root
));
mx
->
mx_dbflag
=
DB_VALID
|
DB_DIRTY
;
/* DB_DIRTY guides mdb_cursor_touch */
#if UINT_MAX < SIZE_MAX
if
(
mx
->
mx_dbx
.
md_cmp
==
mdb_cmp_int
&&
mx
->
mx_db
.
md_pad
==
sizeof
(
size_t
))
mx
->
mx_dbx
.
md_cmp
=
mdb_cmp_clong
;
#endif
}
/** Initialize a cursor for a given transaction and database. */
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment