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

Side by Side Diff: third_party/sqlite/patches/0005-Modify-default-VFS-to-support-WebDatabase.patch

Issue 1310533005: [sqlite] Annotate Chromium-specific exposed functions with SQLITE_API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months 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 unified diff | Download patch
OLDNEW
1 From 67024286d2719aec049605896ef0afec6932f184 Mon Sep 17 00:00:00 2001 1 From 4b957c2c198a53498fe18ad9668e2817ace98b1e Mon Sep 17 00:00:00 2001
2 From: dumi <dumi@chromium.org> 2 From: dumi <dumi@chromium.org>
3 Date: Mon, 20 Jul 2009 23:40:51 +0000 3 Date: Mon, 20 Jul 2009 23:40:51 +0000
4 Subject: [PATCH 05/16] Modify default VFS to support WebDatabase. 4 Subject: [PATCH 05/11] Modify default VFS to support WebDatabase.
5 5
6 The renderer WebDatabase implementation needs to broker certain requests 6 The renderer WebDatabase implementation needs to broker certain requests
7 to the browser. This modifies SQLite to allow monkey-patching the VFS 7 to the browser. This modifies SQLite to allow monkey-patching the VFS
8 to support this. 8 to support this.
9 9
10 NOTE(shess): This patch relies on core SQLite implementation details 10 NOTE(shess): This patch relies on core SQLite implementation details
11 remaining unchanged. When importing a new version of SQLite, pay very 11 remaining unchanged. When importing a new version of SQLite, pay very
12 close attention to whether the change is still doing what is intended. 12 close attention to whether the change is still doing what is intended.
13 13
14 Original review URLs: 14 Original review URLs:
15 https://codereview.chromium.org/159044 15 https://codereview.chromium.org/159044
16 https://codereview.chromium.org/384075 16 https://codereview.chromium.org/384075
17 https://codereview.chromium.org/377039 17 https://codereview.chromium.org/377039
18 [Possibly not a complete list.] 18 [Possibly not a complete list.]
19 --- 19 ---
20 third_party/sqlite/src/src/os_unix.c | 95 ++++++++++++++++++++++++++++++------ 20 third_party/sqlite/src/src/os_unix.c | 100 +++++++++++++++++++++++++++------
21 third_party/sqlite/src/src/os_win.c | 7 +++ 21 third_party/sqlite/src/src/os_win.c | 8 +++
22 2 files changed, 86 insertions(+), 16 deletions(-) 22 third_party/sqlite/src/src/sqlite.h.in | 36 ++++++++++++
23 3 files changed, 128 insertions(+), 16 deletions(-)
23 24
24 diff --git a/third_party/sqlite/src/src/os_unix.c b/third_party/sqlite/src/src/o s_unix.c 25 diff --git a/third_party/sqlite/src/src/os_unix.c b/third_party/sqlite/src/src/o s_unix.c
25 index a9344ee..1624f6a 100644 26 index a9344ee..75b71dc 100644
26 --- a/third_party/sqlite/src/src/os_unix.c 27 --- a/third_party/sqlite/src/src/os_unix.c
27 +++ b/third_party/sqlite/src/src/os_unix.c 28 +++ b/third_party/sqlite/src/src/os_unix.c
28 @@ -1321,6 +1321,12 @@ static int fileHasMoved(unixFile *pFile){ 29 @@ -1321,6 +1321,12 @@ static int fileHasMoved(unixFile *pFile){
29 return pFile->pInode!=0 && pFile->pId!=pFile->pInode->fileId.pId; 30 return pFile->pInode!=0 && pFile->pId!=pFile->pInode->fileId.pId;
30 #else 31 #else
31 struct stat buf; 32 struct stat buf;
32 + 33 +
33 + /* TODO(shess): This check doesn't work when the Chromium's WebDB code is 34 + /* TODO(shess): This check doesn't work when the Chromium's WebDB code is
34 + ** running in the sandbox. 35 + ** running in the sandbox.
35 + */ 36 + */
36 + return 0; 37 + return 0;
37 + 38 +
38 return pFile->pInode!=0 && 39 return pFile->pInode!=0 &&
39 (osStat(pFile->zPath, &buf)!=0 || buf.st_ino!=pFile->pInode->fileId.ino); 40 (osStat(pFile->zPath, &buf)!=0 || buf.st_ino!=pFile->pInode->fileId.ino);
40 #endif 41 #endif
41 @@ -5615,6 +5621,73 @@ static int findCreateFileMode( 42 @@ -5615,6 +5621,78 @@ static int findCreateFileMode(
42 } 43 }
43 44
44 /* 45 /*
45 +** Initializes a unixFile structure with zeros. 46 +** Initializes a unixFile structure with zeros.
46 +*/ 47 +*/
48 +CHROMIUM_SQLITE_API
47 +void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file) { 49 +void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file) {
48 + memset(file, 0, sizeof(unixFile)); 50 + memset(file, 0, sizeof(unixFile));
49 +} 51 +}
50 + 52 +
53 +CHROMIUM_SQLITE_API
51 +int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs, 54 +int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs,
52 + int fd, 55 + int fd,
53 + int dirfd, 56 + int dirfd,
54 + sqlite3_file* file, 57 + sqlite3_file* file,
55 + const char* fileName, 58 + const char* fileName,
56 + int noLock) { 59 + int noLock) {
57 + int ctrlFlags = (noLock ? UNIXFILE_NOLOCK : 0); 60 + int ctrlFlags = (noLock ? UNIXFILE_NOLOCK : 0);
58 + return fillInUnixFile(vfs, fd, file, fileName, ctrlFlags); 61 + return fillInUnixFile(vfs, fd, file, fileName, ctrlFlags);
59 +} 62 +}
60 + 63 +
61 +/* 64 +/*
62 +** Search for an unused file descriptor that was opened on the database file. 65 +** Search for an unused file descriptor that was opened on the database file.
63 +** If a suitable file descriptor if found, then it is stored in *fd; otherwise, 66 +** If a suitable file descriptor if found, then it is stored in *fd; otherwise,
64 +** *fd is not modified. 67 +** *fd is not modified.
65 +** 68 +**
66 +** If a reusable file descriptor is not found, and a new UnixUnusedFd cannot 69 +** If a reusable file descriptor is not found, and a new UnixUnusedFd cannot
67 +** be allocated, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK is returned. 70 +** be allocated, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK is returned.
68 +*/ 71 +*/
72 +CHROMIUM_SQLITE_API
69 +int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file, 73 +int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file,
70 + const char* fileName, 74 + const char* fileName,
71 + int flags, 75 + int flags,
72 + int* fd) { 76 + int* fd) {
73 + unixFile* unixSQLite3File = (unixFile*)file; 77 + unixFile* unixSQLite3File = (unixFile*)file;
74 + int fileType = flags & 0xFFFFFF00; 78 + int fileType = flags & 0xFFFFFF00;
75 + if (fileType == SQLITE_OPEN_MAIN_DB) { 79 + if (fileType == SQLITE_OPEN_MAIN_DB) {
76 + UnixUnusedFd *unusedFd = findReusableFd(fileName, flags); 80 + UnixUnusedFd *unusedFd = findReusableFd(fileName, flags);
77 + if (unusedFd) { 81 + if (unusedFd) {
78 + *fd = unusedFd->fd; 82 + *fd = unusedFd->fd;
79 + } else { 83 + } else {
80 + unusedFd = sqlite3_malloc(sizeof(*unusedFd)); 84 + unusedFd = sqlite3_malloc(sizeof(*unusedFd));
81 + if (!unusedFd) { 85 + if (!unusedFd) {
82 + return SQLITE_NOMEM; 86 + return SQLITE_NOMEM;
83 + } 87 + }
84 + } 88 + }
85 + unixSQLite3File->pUnused = unusedFd; 89 + unixSQLite3File->pUnused = unusedFd;
86 + } 90 + }
87 + return SQLITE_OK; 91 + return SQLITE_OK;
88 +} 92 +}
89 + 93 +
90 +/* 94 +/*
91 +** Marks 'fd' as the unused file descriptor for 'pFile'. 95 +** Marks 'fd' as the unused file descriptor for 'pFile'.
92 +*/ 96 +*/
97 +CHROMIUM_SQLITE_API
93 +void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file, 98 +void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file,
94 + int fd, 99 + int fd,
95 + int flags) { 100 + int flags) {
96 + unixFile* unixSQLite3File = (unixFile*)file; 101 + unixFile* unixSQLite3File = (unixFile*)file;
97 + if (unixSQLite3File->pUnused) { 102 + if (unixSQLite3File->pUnused) {
98 + unixSQLite3File->pUnused->fd = fd; 103 + unixSQLite3File->pUnused->fd = fd;
99 + unixSQLite3File->pUnused->flags = flags; 104 + unixSQLite3File->pUnused->flags = flags;
100 + } 105 + }
101 +} 106 +}
102 + 107 +
103 +/* 108 +/*
104 +** Destroys pFile's field that keeps track of the unused file descriptor. 109 +** Destroys pFile's field that keeps track of the unused file descriptor.
105 +*/ 110 +*/
111 +CHROMIUM_SQLITE_API
106 +void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file) { 112 +void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file) {
107 + unixFile* unixSQLite3File = (unixFile*)file; 113 + unixFile* unixSQLite3File = (unixFile*)file;
108 + sqlite3_free(unixSQLite3File->pUnused); 114 + sqlite3_free(unixSQLite3File->pUnused);
109 +} 115 +}
110 + 116 +
111 +/* 117 +/*
112 ** Open the file zPath. 118 ** Open the file zPath.
113 ** 119 **
114 ** Previously, the SQLite OS layer used three functions in place of this 120 ** Previously, the SQLite OS layer used three functions in place of this
115 @@ -5715,20 +5788,13 @@ static int unixOpen( 121 @@ -5715,20 +5793,13 @@ static int unixOpen(
116 sqlite3_randomness(0,0); 122 sqlite3_randomness(0,0);
117 } 123 }
118 124
119 - memset(p, 0, sizeof(unixFile)); 125 - memset(p, 0, sizeof(unixFile));
120 + chromium_sqlite3_initialize_unix_sqlite3_file(pFile); 126 + chromium_sqlite3_initialize_unix_sqlite3_file(pFile);
121 127
122 if( eType==SQLITE_OPEN_MAIN_DB ){ 128 if( eType==SQLITE_OPEN_MAIN_DB ){
123 - UnixUnusedFd *pUnused; 129 - UnixUnusedFd *pUnused;
124 - pUnused = findReusableFd(zName, flags); 130 - pUnused = findReusableFd(zName, flags);
125 - if( pUnused ){ 131 - if( pUnused ){
126 - fd = pUnused->fd; 132 - fd = pUnused->fd;
127 - }else{ 133 - }else{
128 - pUnused = sqlite3_malloc(sizeof(*pUnused)); 134 - pUnused = sqlite3_malloc(sizeof(*pUnused));
129 - if( !pUnused ){ 135 - if( !pUnused ){
130 - return SQLITE_NOMEM; 136 - return SQLITE_NOMEM;
131 - } 137 - }
132 + rc = chromium_sqlite3_get_reusable_file_handle(pFile, zName, flags, &fd); 138 + rc = chromium_sqlite3_get_reusable_file_handle(pFile, zName, flags, &fd);
133 + if( rc!=SQLITE_OK ){ 139 + if( rc!=SQLITE_OK ){
134 + return rc; 140 + return rc;
135 } 141 }
136 - p->pUnused = pUnused; 142 - p->pUnused = pUnused;
137 143
138 /* Database filenames are double-zero terminated if they are not 144 /* Database filenames are double-zero terminated if they are not
139 ** URIs with parameters. Hence, they can always be passed into 145 ** URIs with parameters. Hence, they can always be passed into
140 @@ -5798,10 +5864,7 @@ static int unixOpen( 146 @@ -5798,10 +5869,7 @@ static int unixOpen(
141 *pOutFlags = flags; 147 *pOutFlags = flags;
142 } 148 }
143 149
144 - if( p->pUnused ){ 150 - if( p->pUnused ){
145 - p->pUnused->fd = fd; 151 - p->pUnused->fd = fd;
146 - p->pUnused->flags = flags; 152 - p->pUnused->flags = flags;
147 - } 153 - }
148 + chromium_sqlite3_update_reusable_file_handle(pFile, fd, flags); 154 + chromium_sqlite3_update_reusable_file_handle(pFile, fd, flags);
149 155
150 if( isDelete ){ 156 if( isDelete ){
151 #if OS_VXWORKS 157 #if OS_VXWORKS
152 @@ -5893,7 +5956,7 @@ static int unixOpen( 158 @@ -5893,7 +5961,7 @@ static int unixOpen(
153 159
154 open_finished: 160 open_finished:
155 if( rc!=SQLITE_OK ){ 161 if( rc!=SQLITE_OK ){
156 - sqlite3_free(p->pUnused); 162 - sqlite3_free(p->pUnused);
157 + chromium_sqlite3_destroy_reusable_file_handle(pFile); 163 + chromium_sqlite3_destroy_reusable_file_handle(pFile);
158 } 164 }
159 return rc; 165 return rc;
160 } 166 }
161 diff --git a/third_party/sqlite/src/src/os_win.c b/third_party/sqlite/src/src/os _win.c 167 diff --git a/third_party/sqlite/src/src/os_win.c b/third_party/sqlite/src/src/os _win.c
162 index 8ca2107..5b0a296 100644 168 index 8ca2107..9320bfc 100644
163 --- a/third_party/sqlite/src/src/os_win.c 169 --- a/third_party/sqlite/src/src/os_win.c
164 +++ b/third_party/sqlite/src/src/os_win.c 170 +++ b/third_party/sqlite/src/src/os_win.c
165 @@ -5546,4 +5546,11 @@ int sqlite3_os_end(void){ 171 @@ -5546,4 +5546,12 @@ int sqlite3_os_end(void){
166 return SQLITE_OK; 172 return SQLITE_OK;
167 } 173 }
168 174
175 +CHROMIUM_SQLITE_API
169 +void chromium_sqlite3_initialize_win_sqlite3_file(sqlite3_file* file, HANDLE ha ndle) { 176 +void chromium_sqlite3_initialize_win_sqlite3_file(sqlite3_file* file, HANDLE ha ndle) {
170 + winFile* winSQLite3File = (winFile*)file; 177 + winFile* winSQLite3File = (winFile*)file;
171 + memset(file, 0, sizeof(*file)); 178 + memset(file, 0, sizeof(*file));
172 + winSQLite3File->pMethod = &winIoMethod; 179 + winSQLite3File->pMethod = &winIoMethod;
173 + winSQLite3File->h = handle; 180 + winSQLite3File->h = handle;
174 +} 181 +}
175 + 182 +
176 #endif /* SQLITE_OS_WIN */ 183 #endif /* SQLITE_OS_WIN */
184 diff --git a/third_party/sqlite/src/src/sqlite.h.in b/third_party/sqlite/src/src /sqlite.h.in
185 index f1d4e40..36aa999 100644
186 --- a/third_party/sqlite/src/src/sqlite.h.in
187 +++ b/third_party/sqlite/src/src/sqlite.h.in
188 @@ -7408,6 +7408,42 @@ int sqlite3_vtab_on_conflict(sqlite3 *);
189
190
191
192 +/* Begin WebDatabase patch for Chromium */
193 +/* Expose some SQLite internals for the WebDatabase vfs.
194 +** DO NOT EXTEND THE USE OF THIS.
195 +*/
196 +#ifndef CHROMIUM_SQLITE_API
197 +#define CHROMIUM_SQLITE_API SQLITE_API
198 +#endif
199 +#if defined(CHROMIUM_SQLITE_INTERNALS)
200 +#ifdef _WIN32
201 +CHROMIUM_SQLITE_API
202 +void chromium_sqlite3_initialize_win_sqlite3_file(sqlite3_file* file, HANDLE ha ndle);
203 +#else /* _WIN32 */
204 +CHROMIUM_SQLITE_API
205 +void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file);
206 +CHROMIUM_SQLITE_API
207 +int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs,
208 + int fd,
209 + int dirfd,
210 + sqlite3_file* file,
211 + const char* fileName,
212 + int noLock);
213 +CHROMIUM_SQLITE_API
214 +int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file,
215 + const char* fileName,
216 + int flags,
217 + int* fd);
218 +CHROMIUM_SQLITE_API
219 +void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file,
220 + int fd,
221 + int flags);
222 +CHROMIUM_SQLITE_API
223 +void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file);
224 +#endif /* _WIN32 */
225 +#endif /* CHROMIUM_SQLITE_INTERNALS */
226 +/* End WebDatabase patch for Chromium */
227 +
228 /*
229 ** Undo the hack that converts floating point types to integer for
230 ** builds on processors without floating point support.
177 -- 231 --
178 2.2.1 232 2.4.5
179 233
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698