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


Reply via email to