From 2448628a43a7c71d48d51d4e343d4bdad298b0fc Mon Sep 17 00:00:00 2001 From: Kevin Cernekee Date: Fri, 6 Sep 2013 20:00:38 -0700 Subject: [PATCH] fflush, freadahead, fseeko: Fix for Android * lib/stdio-impl.h: Use local __sfileext definition. Suggested by Bruno Haible in: fflush, freadahead, and fseeko have trouble compiling on Android[1] because they need access to internal elements of the FILE struct. Bionic libc[2], like OpenBSD libc[3], puts the ungetc buffer "_ub" at the beginning of the __sfileext struct. Therefore we can reuse the existing OpenBSD implementation for Android. Test results (Android 4.2.2, ARMv7, NDK r9): root@android:/data/local/tmp # export srcdir=`pwd` root@android:/data/local/tmp # ./test-fflush2.sh ; echo $? 0 root@android:/data/local/tmp # ./test-freadahead.sh ; echo $? 0 root@android:/data/local/tmp # ./test-fseeko.sh ; echo $? 0 root@android:/data/local/tmp # ./test-fseeko2.sh ; echo $? Skipping test: ungetc cannot handle arbitrary bytes 77 root@android:/data/local/tmp # ./test-fseeko3.sh ; echo $? 0 root@android:/data/local/tmp # ./test-fseeko4.sh ; echo $? 0 [1] http://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00295.html [2] https://android.googlesource.com/platform/bionic/+/android-4.3_r2.2/libc/stdio/fileext.h [3] http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=1.2;content-type=text%2Fplain --- ChangeLog | 7 +++++++ lib/stdio-impl.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b58a877741..a467bbe9b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-09-17 Kevin Cernekee + + fflush, freadahead, fseeko: Fix for Android + Suggested by Bruno Haible in: + + * lib/stdio-impl.h: Use local __sfileext definition. + 2013-09-17 Mats Erik Andersson pmccabe2html: Portability to other awk versions. diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h index e00600a158..45291cf3ba 100644 --- a/lib/stdio-impl.h +++ b/lib/stdio-impl.h @@ -57,7 +57,7 @@ # define fp_ fp # endif -# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ /* NetBSD >= 1.5ZA, OpenBSD */ +# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __ANDROID__ /* NetBSD >= 1.5ZA, OpenBSD, Android */ /* See and */ struct __sfileext -- 2.39.5