aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2024-02-19 18:55:32 +0000
committerdrh <>2024-02-19 18:55:32 +0000
commitf40da9226d3693574e4f600e6fa2e933c97ea5f1 (patch)
tree523057e3a03d1ac554df93a5458b4bf08a04e8b1 /src
parente7bdb2172c717f7ba64e15fb65b930524e759d71 (diff)
parente0a9935be1c506646566f6b7845eb381bb219e16 (diff)
downloadsqlite-f40da9226d3693574e4f600e6fa2e933c97ea5f1.tar.gz
sqlite-f40da9226d3693574e4f600e6fa2e933c97ea5f1.zip
Merge trunk fixes into the better-optimize branch.
FossilOrigin-Name: 2cf78a5b5fce7f2d49ce185d27f50722c91a1d6c91bbcecebd4bb5244a76769f
Diffstat (limited to 'src')
-rw-r--r--src/os_unix.c6
-rw-r--r--src/printf.c1
-rw-r--r--src/util.c2
3 files changed, 7 insertions, 2 deletions
diff --git a/src/os_unix.c b/src/os_unix.c
index 4b3d63c2c..4663c22d9 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -1295,8 +1295,12 @@ static int unixLogErrorAtLine(
** available, the error message will often be an empty string. Not a
** huge problem. Incorrectly concluding that the GNU version is available
** could lead to a segfault though.
+ **
+ ** Forum post 3f13857fa4062301 reports that the Android SDK may use
+ ** int-type return, depending on its version.
*/
-#if defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)
+#if (defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)) \
+ && !defined(ANDROID) && !defined(__ANDROID__)
zErr =
# endif
strerror_r(iErrno, aErr, sizeof(aErr)-1);
diff --git a/src/printf.c b/src/printf.c
index c6b3803ca..2e09431bf 100644
--- a/src/printf.c
+++ b/src/printf.c
@@ -498,6 +498,7 @@ void sqlite3_str_vappendf(
if( xtype==etFLOAT ){
iRound = -precision;
}else if( xtype==etGENERIC ){
+ if( precision==0 ) precision = 1;
iRound = precision;
}else{
iRound = precision+1;
diff --git a/src/util.c b/src/util.c
index 207b901ba..4aa82d063 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1069,7 +1069,7 @@ void sqlite3FpDecode(FpDecode *p, double r, int iRound, int mxRound){
assert( p->n>0 );
assert( p->n<sizeof(p->zBuf) );
p->iDP = p->n + exp;
- if( iRound<0 ){
+ if( iRound<=0 ){
iRound = p->iDP - iRound;
if( iRound==0 && p->zBuf[i+1]>='5' ){
iRound = 1;