Changeset 50867 in webkit
- Timestamp:
- Nov 11, 2009 9:58:28 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r50865 r50867 1 2009-11-09 Dumitru Daniliuc <dumi@chromium.org> 2 3 Reviewed by Dimitri Glazkov. 4 5 Fixing Chromium's POSIX VFS implementation, by adding the required 6 "used file descriptors" logic. 7 8 https://bugs.webkit.org/show_bug.cgi?id=31275 9 10 * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp: 11 1 12 2009-11-11 Chris Fleizach <cfleizach@apple.com> 2 13 -
trunk/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp
r48845 r50867 43 43 // Defined in Chromium's codebase in third_party/sqlite/src/os_unix.c 44 44 extern "C" { 45 void initUnixFile(sqlite3_file* file); 46 int fillInUnixFile(sqlite3_vfs* vfs, int fd, int dirfd, sqlite3_file* file, const char* fileName, int noLock); 45 void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file); 46 int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs, int fd, int dirfd, sqlite3_file* file, const char* fileName, int noLock); 47 int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file, const char* fileName, int flags, int* fd); 48 void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file, int fd, int flags); 49 void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file); 47 50 } 48 51 … … 60 63 sqlite3_file* id, int desiredFlags, int* usedFlags) 61 64 { 62 initUnixFile(id); 65 chromium_sqlite3_initialize_unix_sqlite3_file(id); 66 int fd = -1; 63 67 int dirfd = -1; 64 int fd = ChromiumBridge::databaseOpenFile(fileName, desiredFlags, &dirfd); 68 int result = chromium_sqlite3_get_reusable_file_handle(id, fileName, desiredFlags, &fd); 69 if (result != SQLITE_OK) 70 return result; 71 65 72 if (fd < 0) { 66 if (desiredFlags & SQLITE_OPEN_READWRITE) { 73 fd = ChromiumBridge::databaseOpenFile(fileName, desiredFlags, &dirfd); 74 if ((fd < 0) && (desiredFlags & SQLITE_OPEN_READWRITE)) { 67 75 int newFlags = (desiredFlags & ~(SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE)) | SQLITE_OPEN_READONLY; 68 return chromiumOpen(vfs, fileName, id, newFlags, usedFlags); 69 } else 70 return SQLITE_CANTOPEN; 71 } 76 fd = ChromiumBridge::databaseOpenFile(fileName, newFlags, &dirfd); 77 } 78 } 79 if (fd < 0) { 80 chromium_sqlite3_destroy_reusable_file_handle(id); 81 return SQLITE_CANTOPEN; 82 } 83 72 84 if (usedFlags) 73 85 *usedFlags = desiredFlags; 86 chromium_sqlite3_update_reusable_file_handle(id, fd, desiredFlags); 74 87 75 88 fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); … … 80 93 int fileType = desiredFlags & 0x00007F00; 81 94 int noLock = (fileType != SQLITE_OPEN_MAIN_DB); 82 return fillInUnixFile(vfs, fd, dirfd, id, fileName, noLock); 95 result = fillInUnixFile(vfs, fd, dirfd, id, fileName, noLock); 96 if (result != SQLITE_OK) 97 chromium_sqlite3_destroy_reusable_file_handle(id); 98 return result; 83 99 } 84 100
Note: See TracChangeset
for help on using the changeset viewer.