bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] fflush, freadahead, fseeko: Fix for Android


From: Kevin Cernekee
Subject: [PATCH] fflush, freadahead, fseeko: Fix for Android
Date: Fri, 6 Sep 2013 20:00:38 -0700

Suggested by Bruno Haible in:
<http://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00306.html>
* lib/stdio-impl.h: Use local __sfileext definition.
---
 ChangeLog        |    7 +++++++
 lib/stdio-impl.h |    2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)


Additional notes:

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):

    address@hidden:/data/local/tmp # export srcdir=`pwd`
    address@hidden:/data/local/tmp # ./test-fflush2.sh ; echo $?
    0
    address@hidden:/data/local/tmp # ./test-freadahead.sh ; echo $?
    0
    address@hidden:/data/local/tmp # ./test-fseeko.sh ; echo $?
    0
    address@hidden:/data/local/tmp # ./test-fseeko2.sh ; echo $?
    Skipping test: ungetc cannot handle arbitrary bytes
    77
    address@hidden:/data/local/tmp # ./test-fseeko3.sh ; echo $?
    0
    address@hidden:/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 5ef6557..ba6ac32 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-09-06  Kevin Cernekee  <address@hidden>
+
+       fflush, freadahead, fseeko: Fix for Android
+       Suggested by Bruno Haible in:
+       <http://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00306.html>
+       * lib/stdio-impl.h: Use local __sfileext definition.
+
 2013-09-04  Anton Ovchinnikov  <address@hidden>  (tiny change)
 
        regex-quote: fix buffer access out of bounds
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
index e00600a..45291cf 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
-- 
1.7.10.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]