| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 fd = Platform::current()->databaseOpenFile(String(fileName), desiredFlags); | 171 fd = Platform::current()->databaseOpenFile(String(fileName), desiredFlags); |
| 172 } | 172 } |
| 173 if (fd < 0) | 173 if (fd < 0) |
| 174 return SQLITE_CANTOPEN; | 174 return SQLITE_CANTOPEN; |
| 175 | 175 |
| 176 if (usedFlags) | 176 if (usedFlags) |
| 177 *usedFlags = desiredFlags; | 177 *usedFlags = desiredFlags; |
| 178 | 178 |
| 179 fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); | 179 fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); |
| 180 | 180 |
| 181 // The mask 0x00007F00 gives us the 7 bits that determine the type of the file
SQLite is trying to open. | 181 // The mask 0x00007F00 gives us the 7 bits that determine the type of the file |
| 182 // SQLite is trying to open. |
| 182 int fileType = desiredFlags & 0x00007F00; | 183 int fileType = desiredFlags & 0x00007F00; |
| 183 int noLock = (fileType != SQLITE_OPEN_MAIN_DB); | 184 int noLock = (fileType != SQLITE_OPEN_MAIN_DB); |
| 184 sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); | 185 sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); |
| 185 return chromium_sqlite3_fill_in_unix_sqlite3_file( | 186 return chromium_sqlite3_fill_in_unix_sqlite3_file( |
| 186 wrappedVfs, fd, id, fileName, noLock, desiredFlags); | 187 wrappedVfs, fd, id, fileName, noLock, desiredFlags); |
| 187 } | 188 } |
| 188 | 189 |
| 189 int chromiumOpen(sqlite3_vfs* vfs, | 190 int chromiumOpen(sqlite3_vfs* vfs, |
| 190 const char* fileName, | 191 const char* fileName, |
| 191 sqlite3_file* id, | 192 sqlite3_file* id, |
| 192 int desiredFlags, | 193 int desiredFlags, |
| 193 int* usedFlags) { | 194 int* usedFlags) { |
| 194 sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); | 195 sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); |
| 195 sqlite3_file* wrappedFile = | 196 sqlite3_file* wrappedFile = |
| 196 static_cast<sqlite3_file*>(sqlite3_malloc(wrappedVfs->szOsFile)); | 197 static_cast<sqlite3_file*>(sqlite3_malloc(wrappedVfs->szOsFile)); |
| 197 if (!wrappedFile) | 198 if (!wrappedFile) |
| 198 return SQLITE_NOMEM; | 199 return SQLITE_NOMEM; |
| 199 | 200 |
| 200 // Make a local copy of the file name. SQLite's os_unix.c appears to be writt
en to allow caching the pointer passed | 201 // Make a local copy of the file name. SQLite's os_unix.c appears to be |
| 201 // in to this function, but that seems brittle. | 202 // written to allow caching the pointer passed in to this function, but that |
| 203 // seems brittle. |
| 202 char* wrappedFileName = sqlite3_mprintf("%s", fileName); | 204 char* wrappedFileName = sqlite3_mprintf("%s", fileName); |
| 203 if (!wrappedFileName) { | 205 if (!wrappedFileName) { |
| 204 sqlite3_free(wrappedFile); | 206 sqlite3_free(wrappedFile); |
| 205 return SQLITE_NOMEM; | 207 return SQLITE_NOMEM; |
| 206 } | 208 } |
| 207 | 209 |
| 208 // SQLite's unixOpen() makes assumptions about the structure of |fileName|. O
ur local copy may not answer those | 210 // SQLite's unixOpen() makes assumptions about the structure of |fileName|. |
| 209 // assumptions correctly. | 211 // Our local copy may not answer those assumptions correctly. |
| 210 int rc = | 212 int rc = |
| 211 chromiumOpenInternal(vfs, fileName, wrappedFile, desiredFlags, usedFlags); | 213 chromiumOpenInternal(vfs, fileName, wrappedFile, desiredFlags, usedFlags); |
| 212 if (rc != SQLITE_OK) { | 214 if (rc != SQLITE_OK) { |
| 213 sqlite3_free(wrappedFileName); | 215 sqlite3_free(wrappedFileName); |
| 214 sqlite3_free(wrappedFile); | 216 sqlite3_free(wrappedFile); |
| 215 return rc; | 217 return rc; |
| 216 } | 218 } |
| 217 | 219 |
| 218 static sqlite3_io_methods chromiumIoMethods = { | 220 static sqlite3_io_methods chromiumIoMethods = { |
| 219 1, | 221 1, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); | 320 sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); |
| 319 return wrappedVfs->xSleep(wrappedVfs, microseconds); | 321 return wrappedVfs->xSleep(wrappedVfs, microseconds); |
| 320 } | 322 } |
| 321 | 323 |
| 322 int chromiumCurrentTime(sqlite3_vfs* vfs, double* prNow) { | 324 int chromiumCurrentTime(sqlite3_vfs* vfs, double* prNow) { |
| 323 sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); | 325 sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData); |
| 324 return wrappedVfs->xCurrentTime(wrappedVfs, prNow); | 326 return wrappedVfs->xCurrentTime(wrappedVfs, prNow); |
| 325 } | 327 } |
| 326 | 328 |
| 327 int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) { | 329 int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) { |
| 328 // xGetLastError() has never been used by SQLite. The implementation in os_wi
n.c indicates this is a reasonable implementation. | 330 // xGetLastError() has never been used by SQLite. The implementation in |
| 331 // os_win.c indicates this is a reasonable implementation. |
| 329 *s = '\0'; | 332 *s = '\0'; |
| 330 return 0; | 333 return 0; |
| 331 } | 334 } |
| 332 | 335 |
| 333 } // namespace | 336 } // namespace |
| 334 | 337 |
| 335 void SQLiteFileSystem::registerSQLiteVFS() { | 338 void SQLiteFileSystem::registerSQLiteVFS() { |
| 336 sqlite3_vfs* wrappedVfs = sqlite3_vfs_find("unix"); | 339 sqlite3_vfs* wrappedVfs = sqlite3_vfs_find("unix"); |
| 337 | 340 |
| 338 // These are implemented by delegating to |wrappedVfs|. | 341 // These are implemented by delegating to |wrappedVfs|. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 356 chromiumDlSym, | 359 chromiumDlSym, |
| 357 chromiumDlClose, | 360 chromiumDlClose, |
| 358 chromiumRandomness, | 361 chromiumRandomness, |
| 359 chromiumSleep, | 362 chromiumSleep, |
| 360 chromiumCurrentTime, | 363 chromiumCurrentTime, |
| 361 chromiumGetLastError}; | 364 chromiumGetLastError}; |
| 362 sqlite3_vfs_register(&chromium_vfs, 0); | 365 sqlite3_vfs_register(&chromium_vfs, 0); |
| 363 } | 366 } |
| 364 | 367 |
| 365 } // namespace blink | 368 } // namespace blink |
| OLD | NEW |