Quanah wrote:
Latest is 0.9.17.
Thanks. Where's the howto or link to fetch that?
Howard wrote:
You're welcome to submit code patches against the latest code in mdb.master. MSVC Project files and other such stuff will not be accepted
Ok, thanks. How about cmake? Would you like that?
I created a set of small C++ wrapper classes to make the API easier to use in C++ applications. Would you like that?
Timur wrote:
I'd be interested to see those code changes.
Ok, I'll make a patch after I sync up with 0.9.17 and confirm it still builds on Linux.
For the most part, the code changes I made were adding explicit void* casts, which C++ is more strict about than C. I still have these VC++ warnings (in 0.9.15) that I didn't fix:
1>c:\code\lib\liblmdb\mdb.c(3892): warning C4244: '=' : conversion from 'LONGLONG' to 'size_t', possible loss of data 1>c:\code\lib\liblmdb\mdb.c(4287): warning C4244: 'argument' : conversion from 'mdb_hash_t' to 'unsigned long', possible loss of data 1>c:\code\lib\liblmdb\mdb.c(6458): warning C4146: unary minus operator applied to unsigned type, result still unsigned 1>c:\code\lib\liblmdb\mdb.c(8859): warning C4804: '>>' : unsafe use of type 'bool' in operation 1>c:\code\lib\liblmdb\mdb.c(8860): warning C4804: '>>' : unsafe use of type 'bool' in operation
I can make these warnings go away with casts. Should I? Do any of these seem like they may be bugs?
One bug I noticed, I encountered a segfault when opening a directory that didn't exist and so make this change to mdb.c:
/* For RDONLY, get lockfile after we know datafile exists */ if (!(flags & (MDB_RDONLY|MDB_NOLOCK))) { rc = mdb_env_setup_locks(env, lpath, mode, &excl); #ifndef _MSC_VER if (rc) goto leave; #endif }
The goto skips over allocating to a null pointer that is dereferenced later, thus triggering a null pointer segfault.
Thanks!
Robin