Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joe Martin
OpenLDAP
Commits
2e4580be
Commit
2e4580be
authored
Dec 11, 2012
by
Quanah Gibson-Mount
Browse files
Merge remote branch 'origin/mdb.master' into OPENLDAP_REL_ENG_2_4
parents
c6935d1e
0702fbd6
Changes
2
Hide whitespace changes
Inline
Side-by-side
libraries/liblmdb/lmdb.h
View file @
2e4580be
...
...
@@ -158,7 +158,7 @@ extern "C" {
MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH)
/** The release date of this library version */
#define MDB_VERSION_DATE "
Nov
ember
30
, 2012"
#define MDB_VERSION_DATE "
Dec
ember
12
, 2012"
/** A stringifier for the version info */
#define MDB_VERSTR(a,b,c,d) "MDB " #a "." #b "." #c ": (" d ")"
...
...
@@ -574,6 +574,9 @@ int mdb_env_get_path(MDB_env *env, const char **path);
* of the database. The value should be chosen as large as possible,
* to accommodate future growth of the database.
* This function may only be called after #mdb_env_create() and before #mdb_env_open().
* The size may be changed by closing and reopening the environment.
* Any attempt to set a size smaller than the space already consumed
* by the environment will be silently changed to the current size of the used space.
* @param[in] env An environment handle returned by #mdb_env_create()
* @param[in] size The size in bytes
* @return A non-zero error value on failure and 0 on success. Some possible
...
...
libraries/liblmdb/mdb.c
View file @
2e4580be
...
...
@@ -2416,47 +2416,61 @@ mdb_env_read_header(MDB_env *env, MDB_meta *meta)
MDB_pagebuf
pbuf
;
MDB_page
*
p
;
MDB_meta
*
m
;
int
rc
,
err
;
int
i
,
rc
,
err
;
/* We don't know the page size yet, so use a minimum value.
* Read both meta pages so we can use the latest one.
*/
for
(
i
=
0
;
i
<
2
;
i
++
)
{
#ifdef _WIN32
if
(
!
ReadFile
(
env
->
me_fd
,
&
pbuf
,
MDB_PAGESIZE
,
(
DWORD
*
)
&
rc
,
NULL
)
||
rc
==
0
)
if
(
!
ReadFile
(
env
->
me_fd
,
&
pbuf
,
MDB_PAGESIZE
,
(
DWORD
*
)
&
rc
,
NULL
)
||
rc
==
0
)
#else
if
((
rc
=
read
(
env
->
me_fd
,
&
pbuf
,
MDB_PAGESIZE
))
==
0
)
if
((
rc
=
read
(
env
->
me_fd
,
&
pbuf
,
MDB_PAGESIZE
))
==
0
)
#endif
{
return
ENOENT
;
}
else
if
(
rc
!=
MDB_PAGESIZE
)
{
err
=
ErrCode
();
if
(
rc
>
0
)
err
=
MDB_INVALID
;
DPRINTF
(
"read: %s"
,
strerror
(
err
));
return
err
;
}
{
return
ENOENT
;
}
else
if
(
rc
!=
MDB_PAGESIZE
)
{
err
=
ErrCode
();
if
(
rc
>
0
)
err
=
MDB_INVALID
;
DPRINTF
(
"read: %s"
,
strerror
(
err
));
return
err
;
}
p
=
(
MDB_page
*
)
&
pbuf
;
p
=
(
MDB_page
*
)
&
pbuf
;
if
(
!
F_ISSET
(
p
->
mp_flags
,
P_META
))
{
DPRINTF
(
"page %zu not a meta page"
,
p
->
mp_pgno
);
return
MDB_INVALID
;
}
if
(
!
F_ISSET
(
p
->
mp_flags
,
P_META
))
{
DPRINTF
(
"page %zu not a meta page"
,
p
->
mp_pgno
);
return
MDB_INVALID
;
}
m
=
METADATA
(
p
);
if
(
m
->
mm_magic
!=
MDB_MAGIC
)
{
DPUTS
(
"meta has invalid magic"
);
return
MDB_INVALID
;
}
m
=
METADATA
(
p
);
if
(
m
->
mm_magic
!=
MDB_MAGIC
)
{
DPUTS
(
"meta has invalid magic"
);
return
MDB_INVALID
;
}
if
(
m
->
mm_version
!=
MDB_VERSION
)
{
DPRINTF
(
"database is version %u, expected version %u"
,
m
->
mm_version
,
MDB_VERSION
);
return
MDB_VERSION_MISMATCH
;
}
if
(
m
->
mm_version
!=
MDB_VERSION
)
{
DPRINTF
(
"database is version %u, expected version %u"
,
m
->
mm_version
,
MDB_VERSION
);
return
MDB_VERSION_MISMATCH
;
}
memcpy
(
meta
,
m
,
sizeof
(
*
m
));
if
(
i
)
{
if
(
m
->
mm_txnid
>
meta
->
mm_txnid
)
memcpy
(
meta
,
m
,
sizeof
(
*
m
));
}
else
{
memcpy
(
meta
,
m
,
sizeof
(
*
m
));
#ifdef _WIN32
if
(
SetFilePointer
(
env
->
me_fd
,
meta
->
mm_psize
,
NULL
,
FILE_BEGIN
)
!=
meta
->
mm_psize
)
#else
if
(
lseek
(
env
->
me_fd
,
meta
->
mm_psize
,
SEEK_SET
)
!=
meta
->
mm_psize
)
#endif
return
ErrCode
();
}
}
return
0
;
}
...
...
@@ -2504,10 +2518,12 @@ mdb_env_init_meta(MDB_env *env, MDB_meta *meta)
#ifdef _WIN32
{
DWORD
len
;
SetFilePointer
(
env
->
me_fd
,
0
,
NULL
,
FILE_BEGIN
);
rc
=
WriteFile
(
env
->
me_fd
,
p
,
psize
*
2
,
&
len
,
NULL
);
rc
=
(
len
==
psize
*
2
)
?
MDB_SUCCESS
:
ErrCode
();
}
#else
lseek
(
env
->
me_fd
,
0
,
SEEK_SET
);
rc
=
write
(
env
->
me_fd
,
p
,
psize
*
2
);
rc
=
(
rc
==
(
int
)
psize
*
2
)
?
MDB_SUCCESS
:
ErrCode
();
#endif
...
...
@@ -2722,11 +2738,22 @@ mdb_env_open2(MDB_env *env)
return
i
;
DPUTS
(
"new mdbenv"
);
newenv
=
1
;
meta
.
mm_mapsize
=
env
->
me_mapsize
>
DEFAULT_MAPSIZE
?
env
->
me_mapsize
:
DEFAULT_MAPSIZE
;
}
if
(
env
->
me_mapsize
<
meta
.
mm_mapsize
)
env
->
me_mapsize
=
meta
.
mm_mapsize
;
/* Was a mapsize configured? */
if
(
!
env
->
me_mapsize
)
{
/* If this is a new environment, take the default,
* else use the size recorded in the existing env.
*/
env
->
me_mapsize
=
newenv
?
DEFAULT_MAPSIZE
:
meta
.
mm_mapsize
;
}
else
if
(
env
->
me_mapsize
<
meta
.
mm_mapsize
)
{
/* If the configured size is smaller, make sure it's
* still big enough. Silently round up to minimum if not.
*/
size_t
minsize
=
(
meta
.
mm_last_pg
+
1
)
*
meta
.
mm_psize
;
if
(
env
->
me_mapsize
<
minsize
)
env
->
me_mapsize
=
minsize
;
}
#ifdef _WIN32
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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