From: Kevin Cernekee Date: Sat, 7 Sep 2013 03:00:38 +0000 (-0700) Subject: fflush, freadahead, fseeko: Fix for Android X-Git-Tag: v0.1~45 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=2448628a43a7c71d48d51d4e343d4bdad298b0fc;p=gnulib.git 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 --- diff --git a/ChangeLog b/ChangeLog index b58a87774..a467bbe9b 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 e00600a15..45291cf3b 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