You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.2 KiB
140 lines
4.2 KiB
4 months ago
|
--- orig/shell.c 2021-07-12 20:54:40.989319871 +0100
|
||
|
+++ shell.c 2021-07-12 20:54:51.609392247 +0100
|
||
|
@@ -95,6 +95,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>
|
||
|
@@ -12957,6 +12962,22 @@
|
||
|
sqlite3_create_function(p->db, "edit", 2, SQLITE_UTF8, 0,
|
||
|
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);", p->zDbFilename);
|
||
|
--- orig/sqlite3.c 2021-07-12 20:54:40.969319735 +0100
|
||
|
+++ sqlite3.c 2021-07-12 20:54:51.609392247 +0100
|
||
|
@@ -33407,6 +33407,10 @@
|
||
|
# include <sys/mount.h>
|
||
|
#endif
|
||
|
|
||
|
+#if defined(__BIONIC__)
|
||
|
+# include <android/fdsan.h>
|
||
|
+#endif
|
||
|
+
|
||
|
#ifdef HAVE_UTIME
|
||
|
# include <utime.h>
|
||
|
#endif
|
||
|
@@ -34167,6 +34171,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;
|
||
|
}
|
||
|
@@ -34747,7 +34757,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);
|
||
|
}
|
||
|
@@ -37281,7 +37297,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;
|
||
|
|
||
|
@@ -37317,7 +37333,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;
|
||
|
@@ -38012,7 +38028,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;
|
||
|
}
|
||
|
|
||
|
@@ -128302,7 +128318,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;
|
||
|
}
|
||
|
|
||
|
@@ -170259,13 +170275,25 @@
|
||
|
** module with sqlite.
|
||
|
*/
|
||
|
if( SQLITE_OK==rc
|
||
|
+#ifndef ANDROID /* fts3_tokenizer disabled for security reasons */
|
||
|
&& SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "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))
|
||
|
&& SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2))
|
||
|
&& SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
|
||
|
){
|
||
|
+#ifdef SQLITE_ENABLE_FTS3_BACKWARDS
|
||
|
+ rc = sqlite3_create_module_v2(
|
||
|
+ db, "fts1", &fts3Module, (void *)pHash, 0
|
||
|
+ );
|
||
|
+ if(rc) return rc;
|
||
|
+ rc = sqlite3_create_module_v2(
|
||
|
+ db, "fts2", &fts3Module, (void *)pHash, 0
|
||
|
+ );
|
||
|
+ if(rc) return rc;
|
||
|
+#endif
|
||
|
rc = sqlite3_create_module_v2(
|
||
|
db, "fts3", &fts3Module, (void *)pHash, hashDestroy
|
||
|
);
|