Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 1 | diff -r -u -d orig/shell.c ./shell.c |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 2 | --- orig/shell.c 2015-05-08 11:10:06.525393270 -0700 |
| 3 | +++ ./shell.c 2015-05-08 11:17:28.275228469 -0700 |
Nick Kralevich | 3fcd43a | 2015-04-08 13:13:26 -0700 | [diff] [blame] | 4 | @@ -52,6 +52,11 @@ |
| 5 | #endif |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 6 | #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 Kralevich | 8fecf56 | 2014-05-29 16:56:33 -0700 | [diff] [blame] | 14 | #if !defined(_WIN32) && !defined(WIN32) |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 15 | # include <signal.h> |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 16 | @@ -1938,6 +1943,21 @@ |
Jeff Brown | 9bee60b | 2014-08-20 16:41:25 -0700 | [diff] [blame] | 17 | readfileFunc, 0, 0); |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 18 | sqlite3_create_function(p->db, "writefile", 2, SQLITE_UTF8, 0, |
Jeff Brown | 9bee60b | 2014-08-20 16:41:25 -0700 | [diff] [blame] | 19 | writefileFunc, 0, 0); |
| 20 | + |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 21 | + // Begin Android Add |
| 22 | + #ifndef NO_ANDROID_FUNCS |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 23 | + int err = register_localized_collators(p->db, "en_US", 0); |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 24 | + if (err != SQLITE_OK) { |
| 25 | + fprintf(stderr, "register_localized_collators() failed\n"); |
| 26 | + exit(1); |
| 27 | + } |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 28 | + err = register_android_functions(p->db, 0); |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 29 | + 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 | |
| 38 | diff -r -u -d orig/sqlite3.c ./sqlite3.c |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 39 | --- 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 Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 42 | */ |
| 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 Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 55 | @@ -25843,7 +25850,12 @@ |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 56 | #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 Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 68 | @@ -25861,8 +25873,14 @@ |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 69 | #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 Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 81 | { "fchmod", (sqlite3_syscall_ptr)fchmod, 0 }, |
Nick Kralevich | 8fecf56 | 2014-05-29 16:56:33 -0700 | [diff] [blame] | 82 | #define osFchmod ((int(*)(int,mode_t))aSyscall[14].pCurrent) |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 83 | @@ -29112,7 +29130,7 @@ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 84 | SimulateIOError( rc=1 ); |
| 85 | if( rc!=0 ){ |
Nick Kralevich | 3fcd43a | 2015-04-08 13:13:26 -0700 | [diff] [blame] | 86 | storeLastErrno((unixFile*)id, errno); |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 87 | - return SQLITE_IOERR_FSTAT; |
| 88 | + return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath); |
| 89 | } |
| 90 | *pSize = buf.st_size; |
| 91 | |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 92 | @@ -29148,7 +29166,7 @@ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 93 | struct stat buf; /* Used to hold return values of fstat() */ |
| 94 | |
Nick Kralevich | 3fcd43a | 2015-04-08 13:13:26 -0700 | [diff] [blame] | 95 | if( osFstat(pFile->h, &buf) ){ |
| 96 | - return SQLITE_IOERR_FSTAT; |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 97 | + return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath); |
Nick Kralevich | 3fcd43a | 2015-04-08 13:13:26 -0700 | [diff] [blame] | 98 | } |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 99 | |
| 100 | nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk; |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 101 | @@ -29733,7 +29751,7 @@ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 102 | ** 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 Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 110 | @@ -31079,7 +31097,7 @@ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 111 | *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 Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 119 | @@ -105873,7 +105891,7 @@ |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 120 | } |
| 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 Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 128 | @@ -130846,9 +130864,9 @@ |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 129 | #endif |
| 130 | |
| 131 | #ifdef SQLITE_ENABLE_FTS3 |
| 132 | - if( !db->mallocFailed && rc==SQLITE_OK ){ |
| 133 | - rc = sqlite3Fts3Init(db); |
| 134 | - } |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 135 | + if( !db->mallocFailed && rc==SQLITE_OK ){ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 136 | + rc = sqlite3Fts3Init(db); |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 137 | + } |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 138 | #endif |
| 139 | |
| 140 | #ifdef SQLITE_ENABLE_ICU |
Nick Kralevich | 3a6c79f | 2015-05-08 11:25:07 -0700 | [diff] [blame^] | 141 | @@ -136906,16 +136924,28 @@ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 142 | ** 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 Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 152 | && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1)) |
| 153 | ){ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 154 | +#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 Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 164 | rc = sqlite3_create_module_v2( |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 165 | db, "fts3", &fts3Module, (void *)pHash, hashDestroy |
| 166 | - ); |
| 167 | + ); |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 168 | if( rc==SQLITE_OK ){ |
| 169 | rc = sqlite3_create_module_v2( |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 170 | db, "fts4", &fts3Module, (void *)pHash, 0 |