diff --git a/vendors/ocaml-lmdb/src/lmdb.h b/vendors/ocaml-lmdb/src/lmdb.h index 0a10fc92c..16c574a4d 100644 --- a/vendors/ocaml-lmdb/src/lmdb.h +++ b/vendors/ocaml-lmdb/src/lmdb.h @@ -136,7 +136,7 @@ * * @author Howard Chu, Symas Corporation. * - * @copyright Copyright 2011-2017 Howard Chu, Symas Corp. All rights reserved. + * @copyright Copyright 2011-2018 Howard Chu, Symas Corp. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted only as authorized by the OpenLDAP diff --git a/vendors/ocaml-lmdb/src/mdb.c b/vendors/ocaml-lmdb/src/mdb.c index f5f99a590..a487e156f 100644 --- a/vendors/ocaml-lmdb/src/mdb.c +++ b/vendors/ocaml-lmdb/src/mdb.c @@ -5,7 +5,7 @@ * BerkeleyDB API, but much simplified. */ /* - * Copyright 2011-2017 Howard Chu, Symas Corp. + * Copyright 2011-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -48,29 +48,35 @@ * the full size. These APIs are defined in and * but those headers are meant for driver-level development and * conflict with the regular user-level headers, so we explicitly - * declare them here. Using these APIs also means we must link to - * ntdll.dll, which is not linked by default in user code. + * declare them here. We get pointers to these functions from + * NTDLL.DLL at runtime, to avoid buildtime dependencies on any + * NTDLL import libraries. */ -NTSTATUS WINAPI -NtCreateSection(OUT PHANDLE sh, IN ACCESS_MASK acc, +typedef NTSTATUS WINAPI (NtCreateSectionFunc) + (OUT PHANDLE sh, IN ACCESS_MASK acc, IN void * oa OPTIONAL, IN PLARGE_INTEGER ms OPTIONAL, IN ULONG pp, IN ULONG aa, IN HANDLE fh OPTIONAL); +static NtCreateSectionFunc *NtCreateSection; + typedef enum _SECTION_INHERIT { ViewShare = 1, ViewUnmap = 2 } SECTION_INHERIT; -NTSTATUS WINAPI -NtMapViewOfSection(IN PHANDLE sh, IN HANDLE ph, +typedef NTSTATUS WINAPI (NtMapViewOfSectionFunc) + (IN PHANDLE sh, IN HANDLE ph, IN OUT PVOID *addr, IN ULONG_PTR zbits, IN SIZE_T cs, IN OUT PLARGE_INTEGER off OPTIONAL, IN OUT PSIZE_T vs, IN SECTION_INHERIT ih, IN ULONG at, IN ULONG pp); -NTSTATUS WINAPI -NtClose(HANDLE h); +static NtMapViewOfSectionFunc *NtMapViewOfSection; + +typedef NTSTATUS WINAPI (NtCloseFunc)(HANDLE h); + +static NtCloseFunc *NtClose; /** getpid() returns int; MinGW defines pid_t but MinGW64 typedefs it * as int64 which is wrong. MSVC doesn't define it at all, so just @@ -4690,6 +4696,21 @@ mdb_env_open2(MDB_env *env, int prev) env->me_pidquery = MDB_PROCESS_QUERY_LIMITED_INFORMATION; else env->me_pidquery = PROCESS_QUERY_INFORMATION; + /* Grab functions we need from NTDLL */ + if (!NtCreateSection) { + HMODULE h = GetModuleHandle("NTDLL.DLL"); + if (!h) + return MDB_PROBLEM; + NtClose = (NtCloseFunc *)GetProcAddress(h, "NtClose"); + if (!NtClose) + return MDB_PROBLEM; + NtMapViewOfSection = (NtMapViewOfSectionFunc *)GetProcAddress(h, "NtMapViewOfSection"); + if (!NtMapViewOfSection) + return MDB_PROBLEM; + NtCreateSection = (NtCreateSectionFunc *)GetProcAddress(h, "NtCreateSection"); + if (!NtCreateSection) + return MDB_PROBLEM; + } #endif /* _WIN32 */ #ifdef BROKEN_FDATASYNC @@ -5553,7 +5574,7 @@ mdb_env_close0(MDB_env *env, int excl) if (env->me_fd != INVALID_HANDLE_VALUE) (void) close(env->me_fd); if (env->me_txns) { - MDB_PID_T pid = env->me_pid; + MDB_PID_T pid = getpid(); /* Clearing readers is done in this function because * me_txkey with its destructor must be disabled first. * @@ -7648,8 +7669,9 @@ prep_subDB: } else { memcpy((char *)mp + mp->mp_upper + PAGEBASE, (char *)fp + fp->mp_upper + PAGEBASE, olddata.mv_size - fp->mp_upper - PAGEBASE); + memcpy((char *)(&mp->mp_ptrs), (char *)(&fp->mp_ptrs), NUMKEYS(fp) * sizeof(mp->mp_ptrs[0])); for (i=0; imp_ptrs[i] = fp->mp_ptrs[i] + offset; + mp->mp_ptrs[i] += offset; } } diff --git a/vendors/ocaml-lmdb/src/midl.c b/vendors/ocaml-lmdb/src/midl.c index 499df17cc..341021cc5 100644 --- a/vendors/ocaml-lmdb/src/midl.c +++ b/vendors/ocaml-lmdb/src/midl.c @@ -3,8 +3,8 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2000-2016 The OpenLDAP Foundation. - * Portions Copyright 2001-2017 Howard Chu, Symas Corp. + * Copyright 2000-2018 The OpenLDAP Foundation. + * Portions Copyright 2001-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/vendors/ocaml-lmdb/src/midl.h b/vendors/ocaml-lmdb/src/midl.h index 39a87b52c..a0d5727cf 100644 --- a/vendors/ocaml-lmdb/src/midl.h +++ b/vendors/ocaml-lmdb/src/midl.h @@ -11,8 +11,8 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2000-2016 The OpenLDAP Foundation. - * Portions Copyright 2001-2017 Howard Chu, Symas Corp. + * Copyright 2000-2018 The OpenLDAP Foundation. + * Portions Copyright 2001-2018 Howard Chu, Symas Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without