summaryrefslogtreecommitdiff
path: root/dist-3.42.0/Android.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dist-3.42.0/Android.patch')
-rw-r--r--dist-3.42.0/Android.patch153
1 files changed, 153 insertions, 0 deletions
diff --git a/dist-3.42.0/Android.patch b/dist-3.42.0/Android.patch
new file mode 100644
index 0000000..cd39abc
--- /dev/null
+++ b/dist-3.42.0/Android.patch
@@ -0,0 +1,153 @@
+--- orig/shell.c 2023-06-13 13:30:22.470500137 -0700
++++ shell.c 2023-06-13 13:30:22.546500365 -0700
+@@ -127,6 +127,11 @@
+ #endif
+ #include <ctype.h>
+ #include <stdarg.h>
++// Begin Android Add
++#ifndef NO_ANDROID_FUNCS
++#include <sqlite3_android.h>
++#endif
++// End Android Add
+
+ #if !defined(_WIN32) && !defined(WIN32)
+ # include <signal.h>
+@@ -246,7 +251,9 @@
+ #if SQLITE_OS_WINRT
+ #include <intrin.h>
+ #endif
++#ifndef WIN32_LEAN_AND_MEAN
+ #define WIN32_LEAN_AND_MEAN
++#endif
+ #include <windows.h>
+
+ /* string conversion routines only needed on Win32 */
+@@ -20793,6 +20800,21 @@
+ editFunc, 0, 0);
+ #endif
+
++// Begin Android Add
++#ifndef NO_ANDROID_FUNCS
++ int err = register_localized_collators(p->db, "en_US", 0);
++ if (err != SQLITE_OK) {
++ fprintf(stderr, "register_localized_collators() failed\n");
++ exit(1);
++ }
++ err = register_android_functions(p->db, 0);
++ if (err != SQLITE_OK) {
++ fprintf(stderr, "register_android_functions() failed\n");
++ exit(1);
++ }
++#endif
++// End Android Add
++
+ if( p->openMode==SHELL_OPEN_ZIPFILE ){
+ char *zSql = sqlite3_mprintf(
+ "CREATE VIRTUAL TABLE zip USING zipfile(%Q);", zDbFilename);
+--- orig/sqlite3.c 2023-06-13 13:30:22.494500209 -0700
++++ sqlite3.c 2023-06-13 13:30:22.590500496 -0700
+@@ -37314,6 +37314,10 @@
+ # include <sys/mount.h>
+ #endif
+
++#if defined(__BIONIC__)
++# include <android/fdsan.h>
++#endif
++
+ #ifdef HAVE_UTIME
+ # include <utime.h>
+ #endif
+@@ -37922,6 +37926,12 @@
+ #if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0)
+ osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
+ #endif
++
++#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
++ uint64_t tag = android_fdsan_create_owner_tag(
++ ANDROID_FDSAN_OWNER_TYPE_SQLITE, fd);
++ android_fdsan_exchange_owner_tag(fd, 0, tag);
++#endif
+ }
+ return fd;
+ }
+@@ -38502,7 +38512,13 @@
+ ** and move on.
+ */
+ static void robust_close(unixFile *pFile, int h, int lineno){
++#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
++ uint64_t tag = android_fdsan_create_owner_tag(
++ ANDROID_FDSAN_OWNER_TYPE_SQLITE, h);
++ if( android_fdsan_close_with_tag(h, tag) ){
++#else
+ if( osClose(h) ){
++#endif
+ unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close",
+ pFile ? pFile->zPath : 0, lineno);
+ }
+@@ -41051,7 +41067,7 @@
+ SimulateIOError( rc=1 );
+ if( rc!=0 ){
+ storeLastErrno((unixFile*)id, errno);
+- return SQLITE_IOERR_FSTAT;
++ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath);
+ }
+ *pSize = buf.st_size;
+
+@@ -41087,7 +41103,7 @@
+ struct stat buf; /* Used to hold return values of fstat() */
+
+ if( osFstat(pFile->h, &buf) ){
+- return SQLITE_IOERR_FSTAT;
++ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath);
+ }
+
+ nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
+@@ -41829,7 +41845,7 @@
+ ** with the same permissions.
+ */
+ if( osFstat(pDbFd->h, &sStat) ){
+- rc = SQLITE_IOERR_FSTAT;
++ rc = unixLogError(SQLITE_IOERR_FSTAT, "fstat", pDbFd->zPath);
+ goto shm_open_err;
+ }
+
+@@ -138266,7 +138282,7 @@
+ }
+ if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
+ sqlite3SetString(pzErrMsg, db, "unsupported file format");
+- rc = SQLITE_ERROR;
++ rc = SQLITE_CORRUPT_BKPT; // Android Change from "rc = SQLITE_ERROR;";
+ goto initone_error_out;
+ }
+
+@@ -185208,7 +185224,9 @@
+ ** module with sqlite.
+ */
+ if( SQLITE_OK==rc
++#ifndef ANDROID /* fts3_tokenizer disabled for security reasons */
+ && SQLITE_OK==(rc=sqlite3Fts3InitHashTable(db,&pHash->hash,"fts3_tokenizer"))
++#endif
+ && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
+ && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
+ && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
+@@ -185219,6 +185237,20 @@
+ rc = sqlite3_create_module_v2(
+ db, "fts3", &fts3Module, (void *)pHash, hashDestroy
+ );
++#ifdef SQLITE_ENABLE_FTS3_BACKWARDS
++ if( rc==SQLITE_OK ){
++ pHash->nRef++;
++ rc = sqlite3_create_module_v2(
++ db, "fts1", &fts3Module, (void *)pHash, hashDestroy
++ );
++ }
++ if( rc==SQLITE_OK ){
++ pHash->nRef++;
++ rc = sqlite3_create_module_v2(
++ db, "fts2", &fts3Module, (void *)pHash, hashDestroy
++ );
++ }
++#endif
+ if( rc==SQLITE_OK ){
+ pHash->nRef++;
+ rc = sqlite3_create_module_v2(