diff options
| author | Jörg Frings-Fürst <debian@jff.email> | 2018-06-28 04:19:22 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff.email> | 2018-06-28 04:19:22 +0200 | 
| commit | c4f76880e9589a757a194c19a4526599dfe71f50 (patch) | |
| tree | c66def0aa296e781c51dfc51c8bba9d8ac51189b /lib/stdio-impl.h | |
| parent | 76ef1d8e3249e82a6965fd17157bee00a7857ff3 (diff) | |
| parent | 7b65dbd4ebade81d504cfe5e681292a58ad1fdf0 (diff) | |
Update upstream source from tag 'upstream/0.9.10'
Update to upstream version '0.9.10'
with Debian dir 9736048cfd7ea97640dba10ba42a3839100c5694
Diffstat (limited to 'lib/stdio-impl.h')
| -rw-r--r-- | lib/stdio-impl.h | 68 | 
1 files changed, 64 insertions, 4 deletions
| diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h index 64f8fd62..d032ccc7 100644 --- a/lib/stdio-impl.h +++ b/lib/stdio-impl.h @@ -27,6 +27,12 @@     the same implementation of stdio extension API, except that some fields     have different naming conventions, or their access requires some casts.  */ +/* Glibc 2.28 made _IO_IN_BACKUP private.  For now, work around this +   problem by defining it ourselves.  FIXME: Do not rely on glibc +   internals.  */ +#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN +# define _IO_IN_BACKUP 0x100 +#endif  /* BSD stdio derived implementations.  */ @@ -63,25 +69,79 @@  #  define _flags pub._flags  #  define _r pub._r  #  define _w pub._w +# elif defined __ANDROID__ /* Android */ +  /* Up to this commit from 2015-10-12 +     <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a> +     the innards of FILE were public, and fp_ub could be defined like for OpenBSD, +     see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h> +     and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>. +     After this commit, the innards of FILE are hidden.  */ +#  define fp_ ((struct { unsigned char *_p; \ +                         int _r; \ +                         int _w; \ +                         int _flags; \ +                         int _file; \ +                         struct { unsigned char *_base; size_t _size; } _bf; \ +                         int _lbfsize; \ +                         void *_cookie; \ +                         void *_close; \ +                         void *_read; \ +                         void *_seek; \ +                         void *_write; \ +                         struct { unsigned char *_base; size_t _size; } _ext; \ +                         unsigned char *_up; \ +                         int _ur; \ +                         unsigned char _ubuf[3]; \ +                         unsigned char _nbuf[1]; \ +                         struct { unsigned char *_base; size_t _size; } _lb; \ +                         int _blksize; \ +                         fpos_t _offset; \ +                         /* More fields, not relevant here.  */ \ +                       } *) fp)  # else  #  define fp_ fp  # endif -# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix || defined __ANDROID__ /* NetBSD >= 1.5ZA, OpenBSD, Minix 3, Android */ +# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */    /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> -     and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> */ +     and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> +     and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */    struct __sfileext      {        struct  __sbuf _ub; /* ungetc buffer */        /* More fields, not relevant here.  */      };  #  define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub -# else                                         /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin, Android */ +# elif defined __ANDROID__                     /* Android */ +  struct __sfileext +    { +      struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */ +      /* More fields, not relevant here.  */ +    }; +#  define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub +# else                                         /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */  #  define fp_ub fp_->_ub  # endif  # define HASUB(fp) (fp_ub._base != NULL) +# if defined __ANDROID__ /* Android */ +  /* Needed after this commit from 2016-01-25 +     <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */ +#  ifndef __SEOF +#   define __SLBF 1 +#   define __SNBF 2 +#   define __SRD 4 +#   define __SWR 8 +#   define __SRW 0x10 +#   define __SEOF 0x20 +#   define __SERR 0x40 +#  endif +#  ifndef __SOFF +#   define __SOFF 0x1000 +#  endif +# endif +  #endif @@ -121,7 +181,7 @@  #  define _flag __flag  # endif -#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__  /* newer Windows with MSVC */ +#elif defined _WIN32 && ! defined __CYGWIN__  /* newer Windows with MSVC */  /* <stdio.h> does not define the innards of FILE any more.  */  # define WINDOWS_OPAQUE_FILE | 
