aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubenwardy <rubenwardy@gmail.com>2016-12-09 17:27:36 +0000
committerest31 <est31@users.noreply.github.com>2016-12-09 18:27:36 +0100
commit2886f0ccb06af04927d4cd661eaf82a253426c05 (patch)
treea5a8578db6277c2b10488787e2c9251cc0b97178
parent3f88d776dcfb6d8844906ec44d9131d4519a34cb (diff)
downloadminetest-2886f0ccb06af04927d4cd661eaf82a253426c05.tar.gz
minetest-2886f0ccb06af04927d4cd661eaf82a253426c05.tar.bz2
minetest-2886f0ccb06af04927d4cd661eaf82a253426c05.zip
Fix sqlite databases being read-only on 64bit Android by patching sqlite (#4871)
Fixes #4121
-rw-r--r--build/android/Makefile5
-rw-r--r--build/android/patches/sqlite3-readonly-fix.patch17
2 files changed, 20 insertions, 2 deletions
diff --git a/build/android/Makefile b/build/android/Makefile
index 9f2b5d626..40520c5bf 100644
--- a/build/android/Makefile
+++ b/build/android/Makefile
@@ -665,7 +665,9 @@ deps/${SQLITE3_FOLDER}/sqlite3.c :
cd deps; \
wget ${SQLITE3_URL}; \
unzip ${SQLITE3_FOLDER}.zip; \
- ln -s ${SQLITE3_FOLDER} sqlite
+ ln -s ${SQLITE3_FOLDER} sqlite; \
+ cd ${SQLITE3_FOLDER}; \
+ patch sqlite3.c < ${ANDR_ROOT}/patches/sqlite3-readonly-fix.patch
clean_sqlite3:
cd deps && $(RM) -rf ${SQLITE3_FOLDER} && $(RM) -f ${SQLITE3_FOLDER}.zip && \
@@ -831,4 +833,3 @@ $(ANDR_ROOT)/jni/src/android_version.h : prep_srcdir
fi
clean : clean_apk clean_assets
-
diff --git a/build/android/patches/sqlite3-readonly-fix.patch b/build/android/patches/sqlite3-readonly-fix.patch
new file mode 100644
index 000000000..be19055ee
--- /dev/null
+++ b/build/android/patches/sqlite3-readonly-fix.patch
@@ -0,0 +1,17 @@
+--- sqlite3.c 2016-11-29 02:29:24.000000000 +0000
++++ sqlite3.c 2016-12-08 22:54:54.206465377 +0000
+@@ -30445,7 +30445,14 @@
+ #if OS_VXWORKS
+ struct vxworksFileId *pId; /* Unique file ID for vxworks. */
+ #else
+- ino_t ino; /* Inode number */
++ #ifdef ANDROID
++ // Bionic's struct stat has a 64 bit st_ino on both 32 and
++ // 64 bit architectures. ino_t remains 32 bits wide on 32 bit
++ // architectures and can lead to inode truncation.
++ unsigned long long ino; /* Inode number */
++ #else
++ ino_t ino; /* Inode number */
++ #endif
+ #endif
+ };