[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
(ITS#8069) MDb library patch: Use explicit Windows API functions for char* strings
- To: openldap-its@OpenLDAP.org
- Subject: (ITS#8069) MDb library patch: Use explicit Windows API functions for char* strings
- From: pmedvedev@gmail.com
- Date: Sat, 28 Feb 2015 07:11:05 +0000
- Auto-submitted: auto-generated (OpenLDAP-ITS)
Full_Name: Pavel Medvedev
Version:
OS: Windows 7
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (217.25.225.40)
Most Windows API functions such as CreateFile(), CreateMutex(),
OpenMutex() that accept string arguments, are defined with suffix W or A
for appropriate wchar_t* or char* strings, depending of _UNICODE
preprocessor define. Calling explicit functions with A suffix would eliminate
compile errors when _UNICODE is defined.
As a further enhancement, I think path argument encoding should be documented
(probably UTF-8?) for such functions as mdb_env_open(), mdb_env_copy(),
mdb_env_copy2(), and mdb_env_get_path(). This prevent possible problems with
non-latin characters in path names on Windows.
In this case, LMDB implementation on Windows should perform path
conversion to UTF-16 and explicit call to CreateFileW() in mdb_env_open()
and mdb_env_copy2() functions.
---
libraries/liblmdb/mdb.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index a54ce83..a669da6 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -1409,7 +1409,7 @@ mdb_strerror(int err)
;
}
buf[0] = 0;
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
+ FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, err, 0, ptr, sizeof(buf), (va_list *)pad);
return ptr;
@@ -4413,7 +4413,7 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode,
int *excl)
off_t size, rsize;
#ifdef _WIN32
- env->me_lfd = CreateFile(lpath, GENERIC_READ|GENERIC_WRITE,
909env->me_lfd = CreateFileA(lpath, GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
#else
@@ -4517,9 +4517,9 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode,
int xcxcl)
mdb_hash_enc(&val, encbuf);
sprintf(env->me_txns->mti_rmname, "Global\\MDBr%s", encbuf);
sprintf(env->me_txns->mti_wmname, "Global\\MDBw%s", encbuf);
- env->me_rmutex = CreateMutex(&mdb_all_sa, FALSE, env->me_txns->mti_rmname);
+ env->me_rmutex = CreateMutexA(&mdb_all_sa, FALSE, env->me_txns->mti_rmname);
if (!env->me_rmutex) goto fail_errno;
- env->me_wmutex = CreateMutex(&mdb_all_sa, FALSE, env->me_txns->mti_wmname);
+ env->me_wmutex = CreateMutexA(&mdb_all_sa, FALSE, env->me_txns->mti_wmname);
if (!env->me_wmutex) goto fail_errno;
#elif defined(MDB_USE_SYSV_SEM)
unsigned short vals[2] = {1, 1};
@@ -4569,9 +4569,9 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode,
int *excl)
goto fail;
%%D
#ifdef _WIN32
- env->me_rmutex = OpenMutex(SYNCHRONIZE, FALSE, env->me_txns->mti_rmname);
+ env->me_rmutex = OpenMutexA(SYNCHRONIZE, FALSE, env->me_txns->mti_rmname);
if (!env->me_rmutex) goto fail_errno;
- env->me_wmutex =pepenMutex(SYNCHRONIZE, FALSE, env->me_txns->mti_wmname);
+ env->me_wmutex = OpenMutexA(SYNCHRONIZE, FALSE, env->me_txns->mti_wmname);
if (!env->me_wmutex) goto fail_errno;
#elif defined(MDB_USE_SYSV_SEM)
semid = env->me_txns->mti_semid;
@@ -4686,7 +4686,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int
flags, mdb_mode_t mode
len = OPEN_ALWAYS;
}
mode = FILE_ATTRIBUTE_NORMAL;
- env->me_fd = CreateFile(dpath, oflags, FILE_SHARE_READ|FILE_SHARE_WRITE,
+ env->me_fd = CreateFileA(dpath, oflags, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, len, mode, NULL);
#else
if (F_ISSET(flags, MDB_RDONLY))
@@ -4716,7 +4716,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int
flags, mdb_mode_t mode
*/
#ifdef _WIN32
len = OPEN_EXISTING;
- % e9env->me_mfd = CreateFile(dpath, oflags,
+ env->me_mfd = CreateFileA(dpath, oflags,
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, len,
mode | FILE_FLAG_WRITE_THROUGH, NULL);
#else
@@ -8981,7 +8981,7 @@ mdb_env_copy2(MDB_env *env, const char *path, unsigned int
flags)
* already in the OS cache.
*/
#ifdef _WIN32
- newfd = CreateFile(lpath, GENERIC_WRITE, 0, NULL, CREATE_NEW,
+ newfd = CreateFileA(lpath, GENERIC_WRITE, 0, NULL, CREATE_NEW,
FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH, NULL);
#else
newfd = open(lpath, O_WRONLY|O_CREAT|O_EXCL, 0666);
--
1.9.5.msysgit.0