Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: third_party/sqlite/webdb.patch

Issue 694353003: Get `gn gen` to succeed on Windows (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: remove GYP_DEFINES code Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/sqlite/test.patch ('k') | ui/aura/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/sqlite/webdb.patch
diff --git a/third_party/sqlite/webdb.patch b/third_party/sqlite/webdb.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6a4e934f46561fb50e20e4a0b1146b53453d1155
--- /dev/null
+++ b/third_party/sqlite/webdb.patch
@@ -0,0 +1,163 @@
+The WebDatabase implementation in the renderer users a custom vfs to
+broker file open and other requests. This modifies the built-in vfs
+implementation to let that code share much of the implementation
+details.
+
+diff --git src/os_unix.c src/os_unix.c
+index ef04a72..e5e1509 100644
+--- src/os_unix.c
++++ src/os_unix.c
+@@ -3496,9 +3496,16 @@ typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*);
+ */
+
+ /*
++** Initializes a unixFile structure with zeros.
++*/
++void initUnixFile(sqlite3_file* file) {
++ memset(file, 0, sizeof(unixFile));
++}
++
++/*
+ ** Initialize the contents of the unixFile structure pointed to by pId.
+ */
+-static int fillInUnixFile(
++int fillInUnixFile(
+ sqlite3_vfs *pVfs, /* Pointer to vfs object */
+ int h, /* Open file descriptor of file being opened */
+ int dirfd, /* Directory file descriptor */
+@@ -3812,6 +3819,73 @@ static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
+ }
+
+ /*
++** Initializes a unixFile structure with zeros.
++*/
++void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file) {
++ memset(file, 0, sizeof(unixFile));
++}
++
++int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs,
++ int fd,
++ int dirfd,
++ sqlite3_file* file,
++ const char* fileName,
++ int noLock,
++ int isDelete) {
++ return fillInUnixFile(vfs, fd, dirfd, file, fileName, noLock, isDelete, 0);
++}
++
++/*
++** Search for an unused file descriptor that was opened on the database file.
++** If a suitable file descriptor if found, then it is stored in *fd; otherwise,
++** *fd is not modified.
++**
++** If a reusable file descriptor is not found, and a new UnixUnusedFd cannot
++** be allocated, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK is returned.
++*/
++int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file,
++ const char* fileName,
++ int flags,
++ int* fd) {
++ unixFile* unixSQLite3File = (unixFile*)file;
++ int fileType = flags & 0xFFFFFF00;
++ if (fileType == SQLITE_OPEN_MAIN_DB) {
++ UnixUnusedFd *unusedFd = findReusableFd(fileName, flags);
++ if (unusedFd) {
++ *fd = unusedFd->fd;
++ } else {
++ unusedFd = sqlite3_malloc(sizeof(*unusedFd));
++ if (!unusedFd) {
++ return SQLITE_NOMEM;
++ }
++ }
++ unixSQLite3File->pUnused = unusedFd;
++ }
++ return SQLITE_OK;
++}
++
++/*
++** Marks 'fd' as the unused file descriptor for 'pFile'.
++*/
++void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file,
++ int fd,
++ int flags) {
++ unixFile* unixSQLite3File = (unixFile*)file;
++ if (unixSQLite3File->pUnused) {
++ unixSQLite3File->pUnused->fd = fd;
++ unixSQLite3File->pUnused->flags = flags;
++ }
++}
++
++/*
++** Destroys pFile's field that keeps track of the unused file descriptor.
++*/
++void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file) {
++ unixFile* unixSQLite3File = (unixFile*)file;
++ sqlite3_free(unixSQLite3File->pUnused);
++}
++
++/*
+ ** Open the file zPath.
+ **
+ ** Previously, the SQLite OS layer used three functions in place of this
+@@ -3893,20 +3967,13 @@ static int unixOpen(
+ || eType==SQLITE_OPEN_TRANSIENT_DB
+ );
+
+- memset(p, 0, sizeof(unixFile));
++ chromium_sqlite3_initialize_unix_sqlite3_file(pFile);
+
+ if( eType==SQLITE_OPEN_MAIN_DB ){
+- UnixUnusedFd *pUnused;
+- pUnused = findReusableFd(zName, flags);
+- if( pUnused ){
+- fd = pUnused->fd;
+- }else{
+- pUnused = sqlite3_malloc(sizeof(*pUnused));
+- if( !pUnused ){
+- return SQLITE_NOMEM;
+- }
++ rc = chromium_sqlite3_get_reusable_file_handle(pFile, zName, flags, &fd);
++ if( rc!=SQLITE_OK ){
++ return rc;
+ }
+- p->pUnused = pUnused;
+ }else if( !zName ){
+ /* If zName is NULL, the upper layer is requesting a temp file. */
+ assert(isDelete && !isOpenDirectory);
+@@ -3949,10 +4016,7 @@ static int unixOpen(
+ *pOutFlags = flags;
+ }
+
+- if( p->pUnused ){
+- p->pUnused->fd = fd;
+- p->pUnused->flags = flags;
+- }
++ chromium_sqlite3_update_reusable_file_handle(pFile, fd, flags);
+
+ if( isDelete ){
+ #if OS_VXWORKS
+@@ -4028,7 +4092,7 @@ static int unixOpen(
+ rc = fillInUnixFile(pVfs, fd, dirfd, pFile, zPath, noLock, isDelete);
+ open_finished:
+ if( rc!=SQLITE_OK ){
+- sqlite3_free(p->pUnused);
++ chromium_sqlite3_destroy_reusable_file_handle(pFile);
+ }
+ return rc;
+ }
+diff --git src/os_win.c src/os_win.c
+index bc03a4b..06539d7 100644
+--- src/os_win.c
++++ src/os_win.c
+@@ -1890,4 +1890,11 @@ int sqlite3_os_end(void){
+ return SQLITE_OK;
+ }
+
++void chromium_sqlite3_initialize_win_sqlite3_file(sqlite3_file* file, HANDLE handle) {
++ winFile* winSQLite3File = (winFile*)file;
++ memset(file, 0, sizeof(*file));
++ winSQLite3File->pMethod = &winIoMethod;
++ winSQLite3File->h = handle;
++}
++
+ #endif /* SQLITE_OS_WIN */
« no previous file with comments | « third_party/sqlite/test.patch ('k') | ui/aura/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698