fflush, freadahead, fseeko: Fix for Android
* lib/stdio-impl.h: Use local __sfileext definition.
Suggested by Bruno Haible in:
<http://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00306.html>
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