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 17 matching lines...) Expand all Loading... |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
30 | 30 |
31 #include "config.h" | 31 #include "config.h" |
32 #include "modules/webdatabase/sqlite/SQLiteFileSystem.h" | 32 #include "modules/webdatabase/sqlite/SQLiteFileSystem.h" |
33 | 33 |
34 #include <windows.h> | 34 #include <windows.h> |
35 #include <sqlite3.h> | 35 #include <sqlite3.h> |
36 #include "public/platform/Platform.h" | 36 #include "public/platform/Platform.h" |
37 | 37 |
38 using namespace blink; | |
39 | |
40 // Defined in Chromium's codebase in third_party/sqlite/src/os_win.c | 38 // Defined in Chromium's codebase in third_party/sqlite/src/os_win.c |
41 extern "C" { | 39 extern "C" { |
42 int chromium_sqlite3_initialize_win_sqlite3_file(sqlite3_file* file, HANDLE hand
le); | 40 int chromium_sqlite3_initialize_win_sqlite3_file(sqlite3_file* file, HANDLE hand
le); |
43 } | 41 } |
44 | 42 |
| 43 namespace blink { |
| 44 |
45 // Chromium's Windows implementation of SQLite VFS | 45 // Chromium's Windows implementation of SQLite VFS |
46 namespace { | 46 namespace { |
47 | 47 |
48 // Opens a file. | 48 // Opens a file. |
49 // | 49 // |
50 // vfs - pointer to the sqlite3_vfs object. | 50 // vfs - pointer to the sqlite3_vfs object. |
51 // fileName - the name of the file. | 51 // fileName - the name of the file. |
52 // id - the structure that will manipulate the newly opened file. | 52 // id - the structure that will manipulate the newly opened file. |
53 // desiredFlags - the desired open mode flags. | 53 // desiredFlags - the desired open mode flags. |
54 // usedFlags - the actual open mode flags that were used. | 54 // usedFlags - the actual open mode flags that were used. |
55 int chromiumOpen(sqlite3_vfs*, const char* fileName, | 55 int chromiumOpen(sqlite3_vfs*, const char* fileName, |
56 sqlite3_file* id, int desiredFlags, int* usedFlags) | 56 sqlite3_file* id, int desiredFlags, int* usedFlags) |
57 { | 57 { |
58 HANDLE h = blink::Platform::current()->databaseOpenFile(String(fileName), de
siredFlags); | 58 HANDLE h = Platform::current()->databaseOpenFile(String(fileName), desiredFl
ags); |
59 if (h == INVALID_HANDLE_VALUE) { | 59 if (h == INVALID_HANDLE_VALUE) { |
60 if (desiredFlags & SQLITE_OPEN_READWRITE) { | 60 if (desiredFlags & SQLITE_OPEN_READWRITE) { |
61 int newFlags = (desiredFlags | SQLITE_OPEN_READONLY) & ~SQLITE_OPEN_
READWRITE; | 61 int newFlags = (desiredFlags | SQLITE_OPEN_READONLY) & ~SQLITE_OPEN_
READWRITE; |
62 return chromiumOpen(0, fileName, id, newFlags, usedFlags); | 62 return chromiumOpen(0, fileName, id, newFlags, usedFlags); |
63 } else | 63 } else |
64 return SQLITE_CANTOPEN; | 64 return SQLITE_CANTOPEN; |
65 } | 65 } |
66 if (usedFlags) { | 66 if (usedFlags) { |
67 if (desiredFlags & SQLITE_OPEN_READWRITE) | 67 if (desiredFlags & SQLITE_OPEN_READWRITE) |
68 *usedFlags = SQLITE_OPEN_READWRITE; | 68 *usedFlags = SQLITE_OPEN_READWRITE; |
69 else | 69 else |
70 *usedFlags = SQLITE_OPEN_READONLY; | 70 *usedFlags = SQLITE_OPEN_READONLY; |
71 } | 71 } |
72 | 72 |
73 chromium_sqlite3_initialize_win_sqlite3_file(id, h); | 73 chromium_sqlite3_initialize_win_sqlite3_file(id, h); |
74 return SQLITE_OK; | 74 return SQLITE_OK; |
75 } | 75 } |
76 | 76 |
77 // Deletes the given file. | 77 // Deletes the given file. |
78 // | 78 // |
79 // vfs - pointer to the sqlite3_vfs object. | 79 // vfs - pointer to the sqlite3_vfs object. |
80 // fileName - the name of the file. | 80 // fileName - the name of the file. |
81 // syncDir - determines if the directory to which this file belongs | 81 // syncDir - determines if the directory to which this file belongs |
82 // should be synched after the file is deleted. | 82 // should be synched after the file is deleted. |
83 int chromiumDelete(sqlite3_vfs*, const char* fileName, int) | 83 int chromiumDelete(sqlite3_vfs*, const char* fileName, int) |
84 { | 84 { |
85 return blink::Platform::current()->databaseDeleteFile(String(fileName), fals
e); | 85 return Platform::current()->databaseDeleteFile(String(fileName), false); |
86 } | 86 } |
87 | 87 |
88 // Check the existance and status of the given file. | 88 // Check the existance and status of the given file. |
89 // | 89 // |
90 // vfs - pointer to the sqlite3_vfs object. | 90 // vfs - pointer to the sqlite3_vfs object. |
91 // fileName - the name of the file. | 91 // fileName - the name of the file. |
92 // flag - the type of test to make on this file. | 92 // flag - the type of test to make on this file. |
93 // res - the result. | 93 // res - the result. |
94 int chromiumAccess(sqlite3_vfs*, const char* fileName, int flag, int* res) | 94 int chromiumAccess(sqlite3_vfs*, const char* fileName, int flag, int* res) |
95 { | 95 { |
96 DWORD attr = blink::Platform::current()->databaseGetFileAttributes(String(fi
leName)); | 96 DWORD attr = Platform::current()->databaseGetFileAttributes(String(fileName)
); |
97 switch (flag) { | 97 switch (flag) { |
98 case SQLITE_ACCESS_READ: | 98 case SQLITE_ACCESS_READ: |
99 case SQLITE_ACCESS_EXISTS: | 99 case SQLITE_ACCESS_EXISTS: |
100 *res = (attr != INVALID_FILE_ATTRIBUTES); | 100 *res = (attr != INVALID_FILE_ATTRIBUTES); |
101 break; | 101 break; |
102 case SQLITE_ACCESS_READWRITE: | 102 case SQLITE_ACCESS_READWRITE: |
103 *res = ((attr & FILE_ATTRIBUTE_READONLY) == 0); | 103 *res = ((attr & FILE_ATTRIBUTE_READONLY) == 0); |
104 break; | 104 break; |
105 default: | 105 default: |
106 return SQLITE_ERROR; | 106 return SQLITE_ERROR; |
(...skipping 24 matching lines...) Expand all Loading... |
131 void* chromiumDlOpen(sqlite3_vfs*, const char*) | 131 void* chromiumDlOpen(sqlite3_vfs*, const char*) |
132 { | 132 { |
133 return 0; | 133 return 0; |
134 } | 134 } |
135 #else | 135 #else |
136 #define chromiumDlOpen 0 | 136 #define chromiumDlOpen 0 |
137 #endif // SQLITE_OMIT_LOAD_EXTENSION | 137 #endif // SQLITE_OMIT_LOAD_EXTENSION |
138 | 138 |
139 } // namespace | 139 } // namespace |
140 | 140 |
141 namespace blink { | |
142 | |
143 void SQLiteFileSystem::registerSQLiteVFS() | 141 void SQLiteFileSystem::registerSQLiteVFS() |
144 { | 142 { |
145 sqlite3_vfs* win32_vfs = sqlite3_vfs_find("win32"); | 143 sqlite3_vfs* win32_vfs = sqlite3_vfs_find("win32"); |
146 static sqlite3_vfs chromium_vfs = { | 144 static sqlite3_vfs chromium_vfs = { |
147 1, | 145 1, |
148 win32_vfs->szOsFile, | 146 win32_vfs->szOsFile, |
149 win32_vfs->mxPathname, | 147 win32_vfs->mxPathname, |
150 0, | 148 0, |
151 "chromium_vfs", | 149 "chromium_vfs", |
152 win32_vfs->pAppData, | 150 win32_vfs->pAppData, |
153 chromiumOpen, | 151 chromiumOpen, |
154 chromiumDelete, | 152 chromiumDelete, |
155 chromiumAccess, | 153 chromiumAccess, |
156 chromiumFullPathname, | 154 chromiumFullPathname, |
157 chromiumDlOpen, | 155 chromiumDlOpen, |
158 win32_vfs->xDlError, | 156 win32_vfs->xDlError, |
159 win32_vfs->xDlSym, | 157 win32_vfs->xDlSym, |
160 win32_vfs->xDlClose, | 158 win32_vfs->xDlClose, |
161 win32_vfs->xRandomness, | 159 win32_vfs->xRandomness, |
162 win32_vfs->xSleep, | 160 win32_vfs->xSleep, |
163 win32_vfs->xCurrentTime, | 161 win32_vfs->xCurrentTime, |
164 win32_vfs->xGetLastError | 162 win32_vfs->xGetLastError |
165 }; | 163 }; |
166 sqlite3_vfs_register(&chromium_vfs, 0); | 164 sqlite3_vfs_register(&chromium_vfs, 0); |
167 } | 165 } |
168 | 166 |
169 } // namespace blink | 167 } // namespace blink |
OLD | NEW |