Home | History | Annotate | Download | only in dist
      1 diff -r -u -d orig/shell.c ./shell.c
      2 --- orig/shell.c	2015-11-03 01:44:04.000000000 -0800
      3 +++ ./shell.c	2015-12-23 09:50:51.081951250 -0800
      4 @@ -52,6 +52,12 @@
      5  #endif
      6  #include <ctype.h>
      7  #include <stdarg.h>
      8 +// Begin Android Add
      9 +#ifndef NO_ANDROID_FUNCS
     10 +#include "IcuUtils.h"
     11 +#include <sqlite3_android.h>
     12 +#endif
     13 +// End Android Add
     14  
     15  #if !defined(_WIN32) && !defined(WIN32)
     16  # include <signal.h>
     17 @@ -1943,6 +1949,22 @@
     18                              readfileFunc, 0, 0);
     19      sqlite3_create_function(p->db, "writefile", 2, SQLITE_UTF8, 0,
     20                              writefileFunc, 0, 0);
     21 +
     22 +    // Begin Android Add
     23 +    #ifndef NO_ANDROID_FUNCS
     24 +        InitializeIcuOrDie();
     25 +        int err = register_localized_collators(p->db, "en_US", 0);
     26 +        if (err != SQLITE_OK) {
     27 +          fprintf(stderr, "register_localized_collators() failed\n");
     28 +          exit(1);
     29 +        }
     30 +        err = register_android_functions(p->db, 0);
     31 +        if (err != SQLITE_OK) {
     32 +          fprintf(stderr, "register_android_functions() failed\n");
     33 +          exit(1);
     34 +        }
     35 +    #endif
     36 +    // End Android Add
     37    }
     38  }
     39  
     40 diff -r -u -d orig/sqlite3.c ./sqlite3.c
     41 --- orig/sqlite3.c	2015-11-03 01:44:04.000000000 -0800
     42 +++ ./sqlite3.c	2015-12-23 09:50:51.113951381 -0800
     43 @@ -26470,6 +26470,13 @@
     44  /* #include "sqliteInt.h" */
     45  #if SQLITE_OS_UNIX              /* This file is used on unix only */
     46  
     47 +/* Use posix_fallocate() if it is available
     48 +*/
     49 +#if !defined(HAVE_POSIX_FALLOCATE) \
     50 +      && (_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L)
     51 +# define HAVE_POSIX_FALLOCATE 1
     52 +#endif
     53 +
     54  /*
     55  ** There are various methods for file locking used for concurrency
     56  ** control:
     57 @@ -27024,7 +27031,12 @@
     58  #else
     59    { "pread64",      (sqlite3_syscall_ptr)0,          0  },
     60  #endif
     61 +#ifdef ANDROID
     62 +// Bionic defines pread64 using off64_t rather than off_t.
     63 +#define osPread64   ((ssize_t(*)(int,void*,size_t,off64_t))aSyscall[10].pCurrent)
     64 +#else
     65  #define osPread64   ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[10].pCurrent)
     66 +#endif
     67  
     68    { "write",        (sqlite3_syscall_ptr)write,      0  },
     69  #define osWrite     ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent)
     70 @@ -27042,8 +27054,14 @@
     71  #else
     72    { "pwrite64",     (sqlite3_syscall_ptr)0,          0  },
     73  #endif
     74 +#ifdef ANDROID
     75 +// Bionic defines pwrite64 using off64_t rather than off_t.
     76 +#define osPwrite64  ((ssize_t(*)(int,const void*,size_t,off64_t))\
     77 +                    aSyscall[13].pCurrent)
     78 +#else
     79  #define osPwrite64  ((ssize_t(*)(int,const void*,size_t,off_t))\
     80                      aSyscall[13].pCurrent)
     81 +#endif
     82  
     83    { "fchmod",       (sqlite3_syscall_ptr)fchmod,     0  },
     84  #define osFchmod    ((int(*)(int,mode_t))aSyscall[14].pCurrent)
     85 @@ -30292,7 +30310,7 @@
     86    SimulateIOError( rc=1 );
     87    if( rc!=0 ){
     88      storeLastErrno((unixFile*)id, errno);
     89 -    return SQLITE_IOERR_FSTAT;
     90 +    return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath);
     91    }
     92    *pSize = buf.st_size;
     93  
     94 @@ -30328,7 +30346,7 @@
     95      struct stat buf;              /* Used to hold return values of fstat() */
     96     
     97      if( osFstat(pFile->h, &buf) ){
     98 -      return SQLITE_IOERR_FSTAT;
     99 +      return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath);
    100      }
    101  
    102      nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
    103 @@ -30913,7 +30931,7 @@
    104      ** with the same permissions.
    105      */
    106      if( osFstat(pDbFd->h, &sStat) && pInode->bProcessLock==0 ){
    107 -      rc = SQLITE_IOERR_FSTAT;
    108 +      rc = unixLogError(SQLITE_IOERR_FSTAT, "fstat", pDbFd->zPath);
    109        goto shm_open_err;
    110      }
    111  
    112 @@ -32260,7 +32278,7 @@
    113        *pUid = sStat.st_uid;
    114        *pGid = sStat.st_gid;
    115      }else{
    116 -      rc = SQLITE_IOERR_FSTAT;
    117 +      rc = unixLogError(SQLITE_IOERR_FSTAT, "stat", zDb);
    118      }
    119    }else if( flags & SQLITE_OPEN_DELETEONCLOSE ){
    120      *pMode = 0600;
    121 @@ -108046,7 +108064,7 @@
    122    }
    123    if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
    124      sqlite3SetString(pzErrMsg, db, "unsupported file format");
    125 -    rc = SQLITE_ERROR;
    126 +    rc = SQLITE_CORRUPT_BKPT; // Android Change from "rc = SQLITE_ERROR;"
    127      goto initone_error_out;
    128    }
    129  
    130 @@ -139786,16 +139804,28 @@
    131    ** module with sqlite.
    132    */
    133    if( SQLITE_OK==rc 
    134 +#ifndef ANDROID    /* fts3_tokenizer disabled for security reasons */
    135     && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer"))
    136 +#endif
    137     && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
    138     && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
    139     && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
    140     && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2))
    141     && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
    142    ){
    143 +#ifdef SQLITE_ENABLE_FTS3_BACKWARDS
    144 +    rc = sqlite3_create_module_v2(
    145 +        db, "fts1", &fts3Module, (void *)pHash, 0
    146 +        );
    147 +    if(rc) return rc;
    148 +    rc = sqlite3_create_module_v2(
    149 +        db, "fts2", &fts3Module, (void *)pHash, 0
    150 +        );
    151 +    if(rc) return rc;
    152 +#endif
    153      rc = sqlite3_create_module_v2(
    154          db, "fts3", &fts3Module, (void *)pHash, hashDestroy
    155 -    );
    156 +        );
    157      if( rc==SQLITE_OK ){
    158        rc = sqlite3_create_module_v2(
    159            db, "fts4", &fts3Module, (void *)pHash, 0
    160