xref: /aosp_15_r20/external/sqlite/dist/Android.patch (revision a3141fd39888aecc864dfb08485df64ff6c387f9)
1*a3141fd3SAndroid Build Coastguard Worker--- orig/shell.c	2024-03-25 15:44:27.700300649 -0700
2*a3141fd3SAndroid Build Coastguard Worker+++ shell.c	2024-03-25 15:44:27.724300598 -0700
3*a3141fd3SAndroid Build Coastguard Worker@@ -127,6 +127,11 @@
4*a3141fd3SAndroid Build Coastguard Worker #endif
5*a3141fd3SAndroid Build Coastguard Worker #include <ctype.h>
6*a3141fd3SAndroid Build Coastguard Worker #include <stdarg.h>
7*a3141fd3SAndroid Build Coastguard Worker+// Begin Android Add
8*a3141fd3SAndroid Build Coastguard Worker+#ifndef NO_ANDROID_FUNCS
9*a3141fd3SAndroid Build Coastguard Worker+#include <sqlite3_android.h>
10*a3141fd3SAndroid Build Coastguard Worker+#endif
11*a3141fd3SAndroid Build Coastguard Worker+// End Android Add
12*a3141fd3SAndroid Build Coastguard Worker
13*a3141fd3SAndroid Build Coastguard Worker #if !defined(_WIN32) && !defined(WIN32)
14*a3141fd3SAndroid Build Coastguard Worker # include <signal.h>
15*a3141fd3SAndroid Build Coastguard Worker@@ -22266,6 +22271,21 @@
16*a3141fd3SAndroid Build Coastguard Worker                             editFunc, 0, 0);
17*a3141fd3SAndroid Build Coastguard Worker #endif
18*a3141fd3SAndroid Build Coastguard Worker
19*a3141fd3SAndroid Build Coastguard Worker+// Begin Android Add
20*a3141fd3SAndroid Build Coastguard Worker+#ifndef NO_ANDROID_FUNCS
21*a3141fd3SAndroid Build Coastguard Worker+    int err = register_localized_collators(p->db, "en_US", 0);
22*a3141fd3SAndroid Build Coastguard Worker+    if (err != SQLITE_OK) {
23*a3141fd3SAndroid Build Coastguard Worker+      fprintf(stderr, "register_localized_collators() failed\n");
24*a3141fd3SAndroid Build Coastguard Worker+      exit(1);
25*a3141fd3SAndroid Build Coastguard Worker+    }
26*a3141fd3SAndroid Build Coastguard Worker+    err = register_android_functions(p->db, 0);
27*a3141fd3SAndroid Build Coastguard Worker+    if (err != SQLITE_OK) {
28*a3141fd3SAndroid Build Coastguard Worker+      fprintf(stderr, "register_android_functions() failed\n");
29*a3141fd3SAndroid Build Coastguard Worker+      exit(1);
30*a3141fd3SAndroid Build Coastguard Worker+    }
31*a3141fd3SAndroid Build Coastguard Worker+#endif
32*a3141fd3SAndroid Build Coastguard Worker+// End Android Add
33*a3141fd3SAndroid Build Coastguard Worker+
34*a3141fd3SAndroid Build Coastguard Worker     if( p->openMode==SHELL_OPEN_ZIPFILE ){
35*a3141fd3SAndroid Build Coastguard Worker       char *zSql = sqlite3_mprintf(
36*a3141fd3SAndroid Build Coastguard Worker          "CREATE VIRTUAL TABLE zip USING zipfile(%Q);", zDbFilename);
37*a3141fd3SAndroid Build Coastguard Worker--- orig/sqlite3.c	2024-03-25 15:44:27.708300632 -0700
38*a3141fd3SAndroid Build Coastguard Worker+++ sqlite3.c	2024-03-25 15:44:27.748300548 -0700
39*a3141fd3SAndroid Build Coastguard Worker@@ -38035,6 +38035,10 @@
40*a3141fd3SAndroid Build Coastguard Worker # include <sys/mount.h>
41*a3141fd3SAndroid Build Coastguard Worker #endif
42*a3141fd3SAndroid Build Coastguard Worker
43*a3141fd3SAndroid Build Coastguard Worker+#if defined(__BIONIC__)
44*a3141fd3SAndroid Build Coastguard Worker+# include <android/fdsan.h>
45*a3141fd3SAndroid Build Coastguard Worker+#endif
46*a3141fd3SAndroid Build Coastguard Worker+
47*a3141fd3SAndroid Build Coastguard Worker #ifdef HAVE_UTIME
48*a3141fd3SAndroid Build Coastguard Worker # include <utime.h>
49*a3141fd3SAndroid Build Coastguard Worker #endif
50*a3141fd3SAndroid Build Coastguard Worker@@ -38643,6 +38647,12 @@
51*a3141fd3SAndroid Build Coastguard Worker #if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0)
52*a3141fd3SAndroid Build Coastguard Worker     osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
53*a3141fd3SAndroid Build Coastguard Worker #endif
54*a3141fd3SAndroid Build Coastguard Worker+
55*a3141fd3SAndroid Build Coastguard Worker+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
56*a3141fd3SAndroid Build Coastguard Worker+    uint64_t tag = android_fdsan_create_owner_tag(
57*a3141fd3SAndroid Build Coastguard Worker+        ANDROID_FDSAN_OWNER_TYPE_SQLITE, fd);
58*a3141fd3SAndroid Build Coastguard Worker+    android_fdsan_exchange_owner_tag(fd, 0, tag);
59*a3141fd3SAndroid Build Coastguard Worker+#endif
60*a3141fd3SAndroid Build Coastguard Worker   }
61*a3141fd3SAndroid Build Coastguard Worker   return fd;
62*a3141fd3SAndroid Build Coastguard Worker }
63*a3141fd3SAndroid Build Coastguard Worker@@ -39223,7 +39233,13 @@
64*a3141fd3SAndroid Build Coastguard Worker ** and move on.
65*a3141fd3SAndroid Build Coastguard Worker */
66*a3141fd3SAndroid Build Coastguard Worker static void robust_close(unixFile *pFile, int h, int lineno){
67*a3141fd3SAndroid Build Coastguard Worker+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
68*a3141fd3SAndroid Build Coastguard Worker+  uint64_t tag = android_fdsan_create_owner_tag(
69*a3141fd3SAndroid Build Coastguard Worker+      ANDROID_FDSAN_OWNER_TYPE_SQLITE, h);
70*a3141fd3SAndroid Build Coastguard Worker+  if( android_fdsan_close_with_tag(h, tag) ){
71*a3141fd3SAndroid Build Coastguard Worker+#else
72*a3141fd3SAndroid Build Coastguard Worker   if( osClose(h) ){
73*a3141fd3SAndroid Build Coastguard Worker+#endif
74*a3141fd3SAndroid Build Coastguard Worker     unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close",
75*a3141fd3SAndroid Build Coastguard Worker                        pFile ? pFile->zPath : 0, lineno);
76*a3141fd3SAndroid Build Coastguard Worker   }
77*a3141fd3SAndroid Build Coastguard Worker@@ -41763,7 +41779,7 @@
78*a3141fd3SAndroid Build Coastguard Worker   SimulateIOError( rc=1 );
79*a3141fd3SAndroid Build Coastguard Worker   if( rc!=0 ){
80*a3141fd3SAndroid Build Coastguard Worker     storeLastErrno((unixFile*)id, errno);
81*a3141fd3SAndroid Build Coastguard Worker-    return SQLITE_IOERR_FSTAT;
82*a3141fd3SAndroid Build Coastguard Worker+    return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath);
83*a3141fd3SAndroid Build Coastguard Worker   }
84*a3141fd3SAndroid Build Coastguard Worker   *pSize = buf.st_size;
85*a3141fd3SAndroid Build Coastguard Worker
86*a3141fd3SAndroid Build Coastguard Worker@@ -41799,7 +41815,7 @@
87*a3141fd3SAndroid Build Coastguard Worker     struct stat buf;              /* Used to hold return values of fstat() */
88*a3141fd3SAndroid Build Coastguard Worker
89*a3141fd3SAndroid Build Coastguard Worker     if( osFstat(pFile->h, &buf) ){
90*a3141fd3SAndroid Build Coastguard Worker-      return SQLITE_IOERR_FSTAT;
91*a3141fd3SAndroid Build Coastguard Worker+      return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath);
92*a3141fd3SAndroid Build Coastguard Worker     }
93*a3141fd3SAndroid Build Coastguard Worker
94*a3141fd3SAndroid Build Coastguard Worker     nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
95*a3141fd3SAndroid Build Coastguard Worker@@ -42541,7 +42557,7 @@
96*a3141fd3SAndroid Build Coastguard Worker     ** with the same permissions.
97*a3141fd3SAndroid Build Coastguard Worker     */
98*a3141fd3SAndroid Build Coastguard Worker     if( osFstat(pDbFd->h, &sStat) ){
99*a3141fd3SAndroid Build Coastguard Worker-      rc = SQLITE_IOERR_FSTAT;
100*a3141fd3SAndroid Build Coastguard Worker+      rc = unixLogError(SQLITE_IOERR_FSTAT, "fstat", pDbFd->zPath);
101*a3141fd3SAndroid Build Coastguard Worker       goto shm_open_err;
102*a3141fd3SAndroid Build Coastguard Worker     }
103*a3141fd3SAndroid Build Coastguard Worker
104*a3141fd3SAndroid Build Coastguard Worker@@ -140715,7 +140731,7 @@
105*a3141fd3SAndroid Build Coastguard Worker   }
106*a3141fd3SAndroid Build Coastguard Worker   if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
107*a3141fd3SAndroid Build Coastguard Worker     sqlite3SetString(pzErrMsg, db, "unsupported file format");
108*a3141fd3SAndroid Build Coastguard Worker-    rc = SQLITE_ERROR;
109*a3141fd3SAndroid Build Coastguard Worker+    rc = SQLITE_CORRUPT_BKPT; // Android Change from "rc = SQLITE_ERROR;";
110*a3141fd3SAndroid Build Coastguard Worker     goto initone_error_out;
111*a3141fd3SAndroid Build Coastguard Worker   }
112*a3141fd3SAndroid Build Coastguard Worker
113*a3141fd3SAndroid Build Coastguard Worker@@ -188307,7 +188323,9 @@
114*a3141fd3SAndroid Build Coastguard Worker   ** module with sqlite.
115*a3141fd3SAndroid Build Coastguard Worker   */
116*a3141fd3SAndroid Build Coastguard Worker   if( SQLITE_OK==rc
117*a3141fd3SAndroid Build Coastguard Worker+#ifndef ANDROID    /* fts3_tokenizer disabled for security reasons */
118*a3141fd3SAndroid Build Coastguard Worker    && SQLITE_OK==(rc=sqlite3Fts3InitHashTable(db,&pHash->hash,"fts3_tokenizer"))
119*a3141fd3SAndroid Build Coastguard Worker+#endif
120*a3141fd3SAndroid Build Coastguard Worker    && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
121*a3141fd3SAndroid Build Coastguard Worker    && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
122*a3141fd3SAndroid Build Coastguard Worker    && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
123*a3141fd3SAndroid Build Coastguard Worker@@ -188318,6 +188336,20 @@
124*a3141fd3SAndroid Build Coastguard Worker     rc = sqlite3_create_module_v2(
125*a3141fd3SAndroid Build Coastguard Worker         db, "fts3", &fts3Module, (void *)pHash, hashDestroy
126*a3141fd3SAndroid Build Coastguard Worker     );
127*a3141fd3SAndroid Build Coastguard Worker+#ifdef SQLITE_ENABLE_FTS3_BACKWARDS
128*a3141fd3SAndroid Build Coastguard Worker+    if( rc==SQLITE_OK ){
129*a3141fd3SAndroid Build Coastguard Worker+      pHash->nRef++;
130*a3141fd3SAndroid Build Coastguard Worker+      rc = sqlite3_create_module_v2(
131*a3141fd3SAndroid Build Coastguard Worker+          db, "fts1", &fts3Module, (void *)pHash, hashDestroy
132*a3141fd3SAndroid Build Coastguard Worker+      );
133*a3141fd3SAndroid Build Coastguard Worker+    }
134*a3141fd3SAndroid Build Coastguard Worker+    if( rc==SQLITE_OK ){
135*a3141fd3SAndroid Build Coastguard Worker+      pHash->nRef++;
136*a3141fd3SAndroid Build Coastguard Worker+      rc = sqlite3_create_module_v2(
137*a3141fd3SAndroid Build Coastguard Worker+          db, "fts2", &fts3Module, (void *)pHash, hashDestroy
138*a3141fd3SAndroid Build Coastguard Worker+      );
139*a3141fd3SAndroid Build Coastguard Worker+    }
140*a3141fd3SAndroid Build Coastguard Worker+#endif
141*a3141fd3SAndroid Build Coastguard Worker     if( rc==SQLITE_OK ){
142*a3141fd3SAndroid Build Coastguard Worker       pHash->nRef++;
143*a3141fd3SAndroid Build Coastguard Worker       rc = sqlite3_create_module_v2(
144