mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-31 20:19:34 -05:00
Merge remote-tracking branch 'origin/mdb.master'
This commit is contained in:
commit
beca9bbb15
1 changed files with 8 additions and 1 deletions
|
|
@ -163,6 +163,7 @@
|
|||
#define GET_PAGESIZE(x) {SYSTEM_INFO si; GetSystemInfo(&si); (x) = si.dwPageSize;}
|
||||
#define close(fd) (CloseHandle(fd) ? 0 : -1)
|
||||
#define munmap(ptr,len) UnmapViewOfFile(ptr)
|
||||
#define unlink(file) DeleteFile(file)
|
||||
#ifdef PROCESS_QUERY_LIMITED_INFORMATION
|
||||
#define MDB_PROCESS_QUERY_LIMITED_INFORMATION PROCESS_QUERY_LIMITED_INFORMATION
|
||||
#else
|
||||
|
|
@ -3851,7 +3852,7 @@ fail:
|
|||
int
|
||||
mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode)
|
||||
{
|
||||
int oflags, rc, len, excl = -1;
|
||||
int oflags, rc, len, excl = -1, rmlock = 0;
|
||||
char *lpath, *dpath;
|
||||
|
||||
if (env->me_fd!=INVALID_HANDLE_VALUE || (flags & ~(CHANGEABLE|CHANGELESS)))
|
||||
|
|
@ -3903,6 +3904,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode
|
|||
goto leave;
|
||||
|
||||
#ifdef _WIN32
|
||||
#define MDB_NO_SUCH_FILE ERROR_FILE_NOT_FOUND
|
||||
if (F_ISSET(flags, MDB_RDONLY)) {
|
||||
oflags = GENERIC_READ;
|
||||
len = OPEN_EXISTING;
|
||||
|
|
@ -3914,6 +3916,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode
|
|||
env->me_fd = CreateFile(dpath, oflags, FILE_SHARE_READ|FILE_SHARE_WRITE,
|
||||
NULL, len, mode, NULL);
|
||||
#else
|
||||
#define MDB_NO_SUCH_FILE ENOENT
|
||||
if (F_ISSET(flags, MDB_RDONLY))
|
||||
oflags = O_RDONLY;
|
||||
else
|
||||
|
|
@ -3923,6 +3926,8 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode
|
|||
#endif
|
||||
if (env->me_fd == INVALID_HANDLE_VALUE) {
|
||||
rc = ErrCode();
|
||||
if (F_ISSET(flags, MDB_RDONLY) && rc == MDB_NO_SUCH_FILE)
|
||||
rmlock = 1;
|
||||
goto leave;
|
||||
}
|
||||
|
||||
|
|
@ -3954,6 +3959,8 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode
|
|||
leave:
|
||||
if (rc) {
|
||||
mdb_env_close0(env, excl);
|
||||
if (rmlock && excl)
|
||||
unlink(lpath);
|
||||
}
|
||||
free(lpath);
|
||||
return rc;
|
||||
|
|
|
|||
Loading…
Reference in a new issue