[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.16-1409-g5afdf4d
dumi at chromium.org
dumi at chromium.org
Thu Dec 3 13:33:27 UTC 2009
The following commit has been merged in the webkit-1.1 branch:
commit 83c5494e9fc6a8053bfab3086f145e6d83d9f7e2
Author: dumi at chromium.org <dumi at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Nov 12 05:58:28 2009 +0000
Fixing Chromium's POSIX VFS implementation, by adding the required
"used file descriptors" logic.
Reviewed by Dimitri Glazkov.
https://bugs.webkit.org/show_bug.cgi?id=31275
* platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@50867 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 803b8a5..4f9f3c0 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,14 @@
+2009-11-09 Dumitru Daniliuc <dumi at chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Fixing Chromium's POSIX VFS implementation, by adding the required
+ "used file descriptors" logic.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31275
+
+ * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
+
2009-11-11 Chris Fleizach <cfleizach at apple.com>
Reviewed by Oliver Hunt.
diff --git a/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp b/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp
index 2960a5f..97226cb 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 = fillInUnixFile(vfs, fd, dirfd, id, fileName, noLock);
+ if (result != SQLITE_OK)
+ chromium_sqlite3_destroy_reusable_file_handle(id);
+ return result;
}
// Deletes the given file.
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list