summaryrefslogtreecommitdiff
path: root/lib/stdio-impl.h
diff options
context:
space:
mode:
authorKevin Cernekee <cernekee@gmail.com>2013-09-06 20:00:38 -0700
committerPádraig Brady <P@draigBrady.com>2013-09-19 20:05:17 +0100
commit2448628a43a7c71d48d51d4e343d4bdad298b0fc (patch)
treea6faf8bbec403c26587e71fed0e93a9c38e34068 /lib/stdio-impl.h
parentbacee67de2b5252075d1e54f37e934dcde62b0b4 (diff)
downloadgnulib-2448628a43a7c71d48d51d4e343d4bdad298b0fc.tar.gz
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
Diffstat (limited to 'lib/stdio-impl.h')
-rw-r--r--lib/stdio-impl.h2
1 files changed, 1 insertions, 1 deletions
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 <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
and <http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> */
struct __sfileext