diff options
author | Steve Block <steveblock@google.com> | 2009-12-15 10:12:09 +0000 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2009-12-17 17:41:10 +0000 |
commit | 643ca7872b450ea4efacab6188849e5aac2ba161 (patch) | |
tree | 6982576c228bcd1a7efe98afed544d840751094c /WebCore/platform/sql | |
parent | d026980fde6eb3b01c1fe49441174e89cd1be298 (diff) | |
download | external_webkit-643ca7872b450ea4efacab6188849e5aac2ba161.zip external_webkit-643ca7872b450ea4efacab6188849e5aac2ba161.tar.gz external_webkit-643ca7872b450ea4efacab6188849e5aac2ba161.tar.bz2 |
Merge webkit.org at r51976 : Initial merge by git.
Change-Id: Ib0e7e2f0fb4bee5a186610272edf3186f0986b43
Diffstat (limited to 'WebCore/platform/sql')
3 files changed, 29 insertions, 12 deletions
diff --git a/WebCore/platform/sql/chromium/SQLiteFileSystemChromium.cpp b/WebCore/platform/sql/chromium/SQLiteFileSystemChromium.cpp index 3cf961f..752c613 100644 --- a/WebCore/platform/sql/chromium/SQLiteFileSystemChromium.cpp +++ b/WebCore/platform/sql/chromium/SQLiteFileSystemChromium.cpp @@ -58,7 +58,8 @@ int SQLiteFileSystem::openDatabase(const String& fileName, sqlite3** database) // open databases using the default VFS // in renderers, it should be Chromium's VFS; in the browser process it should be SQLite's default VFS return sqlite3_open_v2(fileName.utf8().data(), database, - SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX, 0); + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX, + "chromium_vfs"); } String SQLiteFileSystem::getFileNameForNewDatabase( diff --git a/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp b/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp index 2960a5f..0050a43 100644 --- a/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp +++ b/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp @@ -42,8 +42,11 @@ using namespace WebCore; // Defined in Chromium's codebase in third_party/sqlite/src/os_unix.c extern "C" { -void initUnixFile(sqlite3_file* file); -int fillInUnixFile(sqlite3_vfs* vfs, int fd, int dirfd, sqlite3_file* file, const char* fileName, int noLock); +void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file); +int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs, int fd, int dirfd, sqlite3_file* file, const char* fileName, int noLock); +int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file, const char* fileName, int flags, int* fd); +void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file, int fd, int flags); +void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file); } // Chromium's Posix implementation of SQLite VFS @@ -59,18 +62,28 @@ namespace { int chromiumOpen(sqlite3_vfs* vfs, const char* fileName, sqlite3_file* id, int desiredFlags, int* usedFlags) { - initUnixFile(id); + chromium_sqlite3_initialize_unix_sqlite3_file(id); + int fd = -1; int dirfd = -1; - int fd = ChromiumBridge::databaseOpenFile(fileName, desiredFlags, &dirfd); + int result = chromium_sqlite3_get_reusable_file_handle(id, fileName, desiredFlags, &fd); + if (result != SQLITE_OK) + return result; + if (fd < 0) { - if (desiredFlags & SQLITE_OPEN_READWRITE) { + fd = ChromiumBridge::databaseOpenFile(fileName, desiredFlags, &dirfd); + if ((fd < 0) && (desiredFlags & SQLITE_OPEN_READWRITE)) { int newFlags = (desiredFlags & ~(SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE)) | SQLITE_OPEN_READONLY; - return chromiumOpen(vfs, fileName, id, newFlags, usedFlags); - } else - return SQLITE_CANTOPEN; + fd = ChromiumBridge::databaseOpenFile(fileName, newFlags, &dirfd); + } + } + if (fd < 0) { + chromium_sqlite3_destroy_reusable_file_handle(id); + return SQLITE_CANTOPEN; } + if (usedFlags) *usedFlags = desiredFlags; + chromium_sqlite3_update_reusable_file_handle(id, fd, desiredFlags); fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); if (dirfd >= 0) @@ -79,7 +92,10 @@ int chromiumOpen(sqlite3_vfs* vfs, const char* fileName, // The mask 0x00007F00 gives us the 7 bits that determine the type of the file SQLite is trying to open. int fileType = desiredFlags & 0x00007F00; int noLock = (fileType != SQLITE_OPEN_MAIN_DB); - return fillInUnixFile(vfs, fd, dirfd, id, fileName, noLock); + result = chromium_sqlite3_fill_in_unix_sqlite3_file(vfs, fd, dirfd, id, fileName, noLock); + if (result != SQLITE_OK) + chromium_sqlite3_destroy_reusable_file_handle(id); + return result; } // Deletes the given file. @@ -184,7 +200,7 @@ void SQLiteFileSystem::registerSQLiteVFS() unix_vfs->xCurrentTime, unix_vfs->xGetLastError }; - sqlite3_vfs_register(&chromium_vfs, 1); + sqlite3_vfs_register(&chromium_vfs, 0); } } // namespace WebCore diff --git a/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp b/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp index 153793b..7b57db1 100644 --- a/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp +++ b/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp @@ -169,7 +169,7 @@ void SQLiteFileSystem::registerSQLiteVFS() win32_vfs->xCurrentTime, win32_vfs->xGetLastError }; - sqlite3_vfs_register(&chromium_vfs, 1); + sqlite3_vfs_register(&chromium_vfs, 0); } } // namespace WebCore |