Merge pull request #1417 from corngood/cygwin-fix

Call SetDllDirectory("") after sqlite3 init on cygwin
This commit is contained in:
Eelco Dolstra 2017-06-30 19:50:00 +02:00 committed by GitHub
commit 63d6e0ad3f

View file

@ -30,6 +30,10 @@
#include <sys/xattr.h>
#endif
#ifdef __CYGWIN__
#include <windows.h>
#endif
#include <sqlite3.h>
@ -281,6 +285,16 @@ void LocalStore::openDB(State & state, bool create)
SQLITE_OPEN_READWRITE | (create ? SQLITE_OPEN_CREATE : 0), 0) != SQLITE_OK)
throw Error(format("cannot open Nix database %1%") % dbPath);
#ifdef __CYGWIN__
/* The cygwin version of sqlite3 has a patch which calls
SetDllDirectory("/usr/bin") on init. It was intended to fix extension
loading, which we don't use, and the effect of SetDllDirectory is
inherited by child processes, and causes libraries to be loaded from
/usr/bin instead of $PATH. This breaks quite a few things (e.g.
checkPhase on openssh), so we set it back to default behaviour. */
SetDllDirectoryW(L"");
#endif
if (sqlite3_busy_timeout(db, 60 * 60 * 1000) != SQLITE_OK)
throwSQLiteError(db, "setting timeout");