blob: 922a34b53018ac78e9b1ec503e72f20e182a8116 [file] [log] [blame]
Jeff Brown0bc48362012-04-19 19:17:00 -07001diff -r -u -d orig/shell.c ./shell.c
Nick Kralevich3a6c79f2015-05-08 11:25:07 -07002--- orig/shell.c 2015-05-08 11:10:06.525393270 -0700
3+++ ./shell.c 2015-05-08 11:17:28.275228469 -0700
Nick Kralevich3fcd43a2015-04-08 13:13:26 -07004@@ -52,6 +52,11 @@
5 #endif
Jeff Brown0bc48362012-04-19 19:17:00 -07006 #include <ctype.h>
7 #include <stdarg.h>
8+// Begin Android Add
9+#ifndef NO_ANDROID_FUNCS
10+#include <sqlite3_android.h>
11+#endif
12+// End Android Add
13
Nick Kralevich8fecf562014-05-29 16:56:33 -070014 #if !defined(_WIN32) && !defined(WIN32)
Jeff Brown0bc48362012-04-19 19:17:00 -070015 # include <signal.h>
Nick Kralevich3a6c79f2015-05-08 11:25:07 -070016@@ -1938,6 +1943,21 @@
Jeff Brown9bee60b2014-08-20 16:41:25 -070017 readfileFunc, 0, 0);
Nick Kralevich3a6c79f2015-05-08 11:25:07 -070018 sqlite3_create_function(p->db, "writefile", 2, SQLITE_UTF8, 0,
Jeff Brown9bee60b2014-08-20 16:41:25 -070019 writefileFunc, 0, 0);
20+
Jeff Brown0bc48362012-04-19 19:17:00 -070021+ // Begin Android Add
22+ #ifndef NO_ANDROID_FUNCS
Nick Kralevich3a6c79f2015-05-08 11:25:07 -070023+ int err = register_localized_collators(p->db, "en_US", 0);
Jeff Brown0bc48362012-04-19 19:17:00 -070024+ if (err != SQLITE_OK) {
25+ fprintf(stderr, "register_localized_collators() failed\n");
26+ exit(1);
27+ }
Nick Kralevich3a6c79f2015-05-08 11:25:07 -070028+ err = register_android_functions(p->db, 0);
Jeff Brown0bc48362012-04-19 19:17:00 -070029+ if (err != SQLITE_OK) {
30+ fprintf(stderr, "register_android_functions() failed\n");
31+ exit(1);
32+ }
33+ #endif
34+ // End Android Add
35 }
36 }
37
38diff -r -u -d orig/sqlite3.c ./sqlite3.c
Nick Kralevich3a6c79f2015-05-08 11:25:07 -070039--- orig/sqlite3.c 2015-05-08 11:10:07.173395986 -0700
40+++ ./sqlite3.c 2015-05-08 11:11:18.625694907 -0700
41@@ -25289,6 +25289,13 @@
Nick Kralevich34084e22014-02-28 10:29:21 -080042 */
43 #if SQLITE_OS_UNIX /* This file is used on unix only */
44
45+/* Use posix_fallocate() if it is available
46+*/
47+#if !defined(HAVE_POSIX_FALLOCATE) \
48+ && (_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L)
49+# define HAVE_POSIX_FALLOCATE 1
50+#endif
51+
52 /*
53 ** There are various methods for file locking used for concurrency
54 ** control:
Nick Kralevich3a6c79f2015-05-08 11:25:07 -070055@@ -25843,7 +25850,12 @@
Jeff Brown0bc48362012-04-19 19:17:00 -070056 #else
57 { "pread64", (sqlite3_syscall_ptr)0, 0 },
58 #endif
59+#ifdef ANDROID
60+// Bionic defines pread64 using off64_t rather than off_t.
61+#define osPread64 ((ssize_t(*)(int,void*,size_t,off64_t))aSyscall[10].pCurrent)
62+#else
63 #define osPread64 ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[10].pCurrent)
64+#endif
65
66 { "write", (sqlite3_syscall_ptr)write, 0 },
67 #define osWrite ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent)
Nick Kralevich3a6c79f2015-05-08 11:25:07 -070068@@ -25861,8 +25873,14 @@
Jeff Brown0bc48362012-04-19 19:17:00 -070069 #else
70 { "pwrite64", (sqlite3_syscall_ptr)0, 0 },
71 #endif
72+#ifdef ANDROID
73+// Bionic defines pwrite64 using off64_t rather than off_t.
74+#define osPwrite64 ((ssize_t(*)(int,const void*,size_t,off64_t))\
75+ aSyscall[13].pCurrent)
76+#else
77 #define osPwrite64 ((ssize_t(*)(int,const void*,size_t,off_t))\
78 aSyscall[13].pCurrent)
79+#endif
80
Jeff Brown0bc48362012-04-19 19:17:00 -070081 { "fchmod", (sqlite3_syscall_ptr)fchmod, 0 },
Nick Kralevich8fecf562014-05-29 16:56:33 -070082 #define osFchmod ((int(*)(int,mode_t))aSyscall[14].pCurrent)
Nick Kralevich3a6c79f2015-05-08 11:25:07 -070083@@ -29112,7 +29130,7 @@
Nick Kralevich34084e22014-02-28 10:29:21 -080084 SimulateIOError( rc=1 );
85 if( rc!=0 ){
Nick Kralevich3fcd43a2015-04-08 13:13:26 -070086 storeLastErrno((unixFile*)id, errno);
Nick Kralevich34084e22014-02-28 10:29:21 -080087- return SQLITE_IOERR_FSTAT;
88+ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath);
89 }
90 *pSize = buf.st_size;
91
Nick Kralevich3a6c79f2015-05-08 11:25:07 -070092@@ -29148,7 +29166,7 @@
Nick Kralevich34084e22014-02-28 10:29:21 -080093 struct stat buf; /* Used to hold return values of fstat() */
94
Nick Kralevich3fcd43a2015-04-08 13:13:26 -070095 if( osFstat(pFile->h, &buf) ){
96- return SQLITE_IOERR_FSTAT;
Nick Kralevich34084e22014-02-28 10:29:21 -080097+ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath);
Nick Kralevich3fcd43a2015-04-08 13:13:26 -070098 }
Nick Kralevich34084e22014-02-28 10:29:21 -080099
100 nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
Nick Kralevich3a6c79f2015-05-08 11:25:07 -0700101@@ -29733,7 +29751,7 @@
Nick Kralevich34084e22014-02-28 10:29:21 -0800102 ** with the same permissions.
103 */
104 if( osFstat(pDbFd->h, &sStat) && pInode->bProcessLock==0 ){
105- rc = SQLITE_IOERR_FSTAT;
106+ rc = unixLogError(SQLITE_IOERR_FSTAT, "fstat", pDbFd->zPath);
107 goto shm_open_err;
108 }
109
Nick Kralevich3a6c79f2015-05-08 11:25:07 -0700110@@ -31079,7 +31097,7 @@
Nick Kralevich34084e22014-02-28 10:29:21 -0800111 *pUid = sStat.st_uid;
112 *pGid = sStat.st_gid;
113 }else{
114- rc = SQLITE_IOERR_FSTAT;
115+ rc = unixLogError(SQLITE_IOERR_FSTAT, "stat", zDb);
116 }
117 }else if( flags & SQLITE_OPEN_DELETEONCLOSE ){
118 *pMode = 0600;
Nick Kralevich3a6c79f2015-05-08 11:25:07 -0700119@@ -105873,7 +105891,7 @@
Jeff Brown0bc48362012-04-19 19:17:00 -0700120 }
121 if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
122 sqlite3SetString(pzErrMsg, db, "unsupported file format");
123- rc = SQLITE_ERROR;
124+ rc = SQLITE_CORRUPT_BKPT; // Android Change from "rc = SQLITE_ERROR;"
125 goto initone_error_out;
126 }
127
Nick Kralevich3a6c79f2015-05-08 11:25:07 -0700128@@ -130846,9 +130864,9 @@
Jeff Brown0bc48362012-04-19 19:17:00 -0700129 #endif
130
131 #ifdef SQLITE_ENABLE_FTS3
132- if( !db->mallocFailed && rc==SQLITE_OK ){
133- rc = sqlite3Fts3Init(db);
134- }
Jeff Brown0bc48362012-04-19 19:17:00 -0700135+ if( !db->mallocFailed && rc==SQLITE_OK ){
Nick Kralevich34084e22014-02-28 10:29:21 -0800136+ rc = sqlite3Fts3Init(db);
Jeff Brown0bc48362012-04-19 19:17:00 -0700137+ }
Jeff Brown0bc48362012-04-19 19:17:00 -0700138 #endif
139
140 #ifdef SQLITE_ENABLE_ICU
Nick Kralevich3a6c79f2015-05-08 11:25:07 -0700141@@ -136906,16 +136924,28 @@
Nick Kralevich34084e22014-02-28 10:29:21 -0800142 ** module with sqlite.
143 */
144 if( SQLITE_OK==rc
145+#ifndef ANDROID /* fts3_tokenizer disabled for security reasons */
146 && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer"))
147+#endif
148 && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
149 && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
150 && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
151 && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2))
Jeff Brown0bc48362012-04-19 19:17:00 -0700152 && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
153 ){
Nick Kralevich34084e22014-02-28 10:29:21 -0800154+#ifdef SQLITE_ENABLE_FTS3_BACKWARDS
155+ rc = sqlite3_create_module_v2(
156+ db, "fts1", &fts3Module, (void *)pHash, 0
157+ );
158+ if(rc) return rc;
159+ rc = sqlite3_create_module_v2(
160+ db, "fts2", &fts3Module, (void *)pHash, 0
161+ );
162+ if(rc) return rc;
163+#endif
Jeff Brown0bc48362012-04-19 19:17:00 -0700164 rc = sqlite3_create_module_v2(
Nick Kralevich34084e22014-02-28 10:29:21 -0800165 db, "fts3", &fts3Module, (void *)pHash, hashDestroy
166- );
167+ );
Jeff Brown0bc48362012-04-19 19:17:00 -0700168 if( rc==SQLITE_OK ){
169 rc = sqlite3_create_module_v2(
Nick Kralevich34084e22014-02-28 10:29:21 -0800170 db, "fts4", &fts3Module, (void *)pHash, 0