summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaakov Selkowitz <yselkowi@redhat.com>2014-12-11 16:53:32 +0000
committerYaakov Selkowitz <yselkowi@redhat.com>2014-12-11 16:53:32 +0000
commit6f34876e5e81e768cc34547bedee0da2c31d8aae (patch)
tree459a47fa4a1ebbafc8581838d4f9ee04b692de1f
parent070d1cee7d0e5616ca93ec02219e18816c79c640 (diff)
downloadcygnal-6f34876e5e81e768cc34547bedee0da2c31d8aae.tar.gz
cygnal-6f34876e5e81e768cc34547bedee0da2c31d8aae.tar.bz2
cygnal-6f34876e5e81e768cc34547bedee0da2c31d8aae.zip
* libc/include/stdio_ext.h: Rename __fwriteable to __fwritable.
[!__GNUC__]: Declare real functions for the macros, and make the macros conditional on !__cplusplus. * libc/stdio/Makefile.am (ELIX_4_SOURCES): Add stdio_ext.c. (CHEWOUT_FILES): Add stdio_ext.def. * libc/stdio/Makefile.in: Regenerate. * libc/stdio/stdio.tex: Include stdio_ext.def. * libc/stdio/stdio_ext.c: New file.
-rw-r--r--newlib/ChangeLog11
-rw-r--r--newlib/libc/include/stdio_ext.h16
-rw-r--r--newlib/libc/stdio/Makefile.am2
-rw-r--r--newlib/libc/stdio/Makefile.in10
-rw-r--r--newlib/libc/stdio/stdio.tex3
-rw-r--r--newlib/libc/stdio/stdio_ext.c113
6 files changed, 153 insertions, 2 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index e05a04c7c..2612b2d35 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,14 @@
+2014-12-11 Yaakov Selkowitz <yselkowi@redhat.com>
+
+ * libc/include/stdio_ext.h: Rename __fwriteable to __fwritable.
+ [!__GNUC__]: Declare real functions for the macros, and make
+ the macros conditional on !__cplusplus.
+ * libc/stdio/Makefile.am (ELIX_4_SOURCES): Add stdio_ext.c.
+ (CHEWOUT_FILES): Add stdio_ext.def.
+ * libc/stdio/Makefile.in: Regenerate.
+ * libc/stdio/stdio.tex: Include stdio_ext.def.
+ * libc/stdio/stdio_ext.c: New file.
+
2014-12-04 Corinna Vinschen <vinschen@redhat.com>
* libc/include/stdio_ext.h: Remove excess "inline".
diff --git a/newlib/libc/include/stdio_ext.h b/newlib/libc/include/stdio_ext.h
index 0c9ddadaf..4b6f8ae36 100644
--- a/newlib/libc/include/stdio_ext.h
+++ b/newlib/libc/include/stdio_ext.h
@@ -38,7 +38,7 @@ _ELIDABLE_INLINE int
__freadable (FILE *__fp) { return (__fp->_flags & (__SRD | __SRW)) != 0; }
_ELIDABLE_INLINE int
-__fwriteable (FILE *__fp) { return (__fp->_flags & (__SWR | __SRW)) != 0; }
+__fwritable (FILE *__fp) { return (__fp->_flags & (__SWR | __SRW)) != 0; }
_ELIDABLE_INLINE int
__flbf (FILE *__fp) { return (__fp->_flags & __SLBF) != 0; }
@@ -48,14 +48,26 @@ __fpending (FILE *__fp) { return __fp->_p - __fp->_bf._base; }
#else
+size_t _EXFUN(__fbufsize,(FILE *));
+int _EXFUN(__freading,(FILE *));
+int _EXFUN(__fwriting,(FILE *));
+int _EXFUN(__freadable,(FILE *));
+int _EXFUN(__fwritable,(FILE *));
+int _EXFUN(__flbf,(FILE *));
+size_t _EXFUN(__fpending,(FILE *));
+
+#ifndef __cplusplus
+
#define __fbufsize(__fp) ((size_t) (__fp)->_bf._size)
#define __freading(__fp) (((__fp)->_flags & __SRD) != 0)
#define __fwriting(__fp) (((__fp)->_flags & __SWR) != 0)
#define __freadable(__fp) (((__fp)->_flags & (__SRD | __SRW)) != 0)
-#define __fwriteable(__fp) (((__fp)->_flags & (__SWR | __SRW)) != 0)
+#define __fwritable(__fp) (((__fp)->_flags & (__SWR | __SRW)) != 0)
#define __flbf(__fp) (((__fp)->_flags & __SLBF) != 0)
#define __fpending(__fp) ((size_t) ((__fp)->_p - (__fp)->_bf._base))
+#endif /* __cplusplus */
+
#endif /* __GNUC__ */
_END_STD_C
diff --git a/newlib/libc/stdio/Makefile.am b/newlib/libc/stdio/Makefile.am
index 1d459b250..8069ead16 100644
--- a/newlib/libc/stdio/Makefile.am
+++ b/newlib/libc/stdio/Makefile.am
@@ -155,6 +155,7 @@ ELIX_4_SOURCES = \
open_memstream.c \
putwc.c \
putwchar.c \
+ stdio_ext.c \
swprintf.c \
swscanf.c \
ungetwc.c \
@@ -391,6 +392,7 @@ CHEWOUT_FILES = \
setvbuf.def \
sprintf.def \
sscanf.def \
+ stdio_ext.def \
swprintf.def \
swscanf.def \
tmpfile.def \
diff --git a/newlib/libc/stdio/Makefile.in b/newlib/libc/stdio/Makefile.in
index 3a14d1772..e1c4866f1 100644
--- a/newlib/libc/stdio/Makefile.in
+++ b/newlib/libc/stdio/Makefile.in
@@ -152,6 +152,7 @@ am__objects_2 = $(am__objects_1) lib_a-clearerr.$(OBJEXT) \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ lib_a-open_memstream.$(OBJEXT) \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ lib_a-putwc.$(OBJEXT) \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ lib_a-putwchar.$(OBJEXT) \
+@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ lib_a-stdio_ext.$(OBJEXT) \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ lib_a-swprintf.$(OBJEXT) \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ lib_a-swscanf.$(OBJEXT) \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ lib_a-ungetwc.$(OBJEXT) \
@@ -214,6 +215,7 @@ am__objects_8 = $(am__objects_7) clearerr.lo fclose.lo fdopen.lo \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ open_memstream.lo \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ putwc.lo \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ putwchar.lo \
+@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ stdio_ext.lo \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ swprintf.lo \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ swscanf.lo \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ ungetwc.lo \
@@ -521,6 +523,7 @@ GENERAL_SOURCES = \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ open_memstream.c \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ putwc.c \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ putwchar.c \
+@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ stdio_ext.c \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ swprintf.c \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ swscanf.c \
@ELIX_LEVEL_1_FALSE@@ELIX_LEVEL_2_FALSE@@ELIX_LEVEL_3_FALSE@ ungetwc.c \
@@ -663,6 +666,7 @@ CHEWOUT_FILES = \
setvbuf.def \
sprintf.def \
sscanf.def \
+ stdio_ext.def \
swprintf.def \
swscanf.def \
tmpfile.def \
@@ -1405,6 +1409,12 @@ lib_a-putwchar.o: putwchar.c
lib_a-putwchar.obj: putwchar.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-putwchar.obj `if test -f 'putwchar.c'; then $(CYGPATH_W) 'putwchar.c'; else $(CYGPATH_W) '$(srcdir)/putwchar.c'; fi`
+lib_a-stdio_ext.o: stdio_ext.c
+ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-stdio_ext.o `test -f 'stdio_ext.c' || echo '$(srcdir)/'`stdio_ext.c
+
+lib_a-stdio_ext.obj: stdio_ext.c
+ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-stdio_ext.obj `if test -f 'stdio_ext.c'; then $(CYGPATH_W) 'stdio_ext.c'; else $(CYGPATH_W) '$(srcdir)/stdio_ext.c'; fi`
+
lib_a-swprintf.o: swprintf.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-swprintf.o `test -f 'swprintf.c' || echo '$(srcdir)/'`swprintf.c
diff --git a/newlib/libc/stdio/stdio.tex b/newlib/libc/stdio/stdio.tex
index 2088d74ed..7b5427d7b 100644
--- a/newlib/libc/stdio/stdio.tex
+++ b/newlib/libc/stdio/stdio.tex
@@ -283,6 +283,9 @@ structure.
@include stdio/sscanf.def
@page
+@include stdio/stdio_ext.def
+
+@page
@include stdio/swprintf.def
@page
diff --git a/newlib/libc/stdio/stdio_ext.c b/newlib/libc/stdio/stdio_ext.c
new file mode 100644
index 000000000..cd886c277
--- /dev/null
+++ b/newlib/libc/stdio/stdio_ext.c
@@ -0,0 +1,113 @@
+/*
+FUNCTION
+<<__fbufsize>>, <<__fpending>>, <<__flbf>>, <<__freadable>>, <<__fwritable>> <<__freading>>, <<__fwriting>>,---access internals of FILE structure
+
+INDEX
+ __fbufsize
+INDEX
+ __fpending
+INDEX
+ __flbf
+INDEX
+ __freadable
+INDEX
+ __fwritable
+INDEX
+ __freading
+INDEX
+ __fwriting
+
+ANSI_SYNOPSIS
+ #include <stdio.h>
+ #include <stdio_ext.h>
+ size_t __fbufsize(FILE *<[fp]>);
+ size_t __fpending(FILE *<[fp]>);
+ int __flbf(FILE *<[fp]>);
+ int __freadable(FILE *<[fp]>);
+ int __fwritable(FILE *<[fp]>);
+ int __freading(FILE *<[fp]>);
+ int __fwriting(FILE *<[fp]>);
+
+DESCRIPTION
+These functions provides access to the internals of the FILE structure <[fp]>.
+
+RETURNS
+<<__fbufsize>> returns the number of bytes in the buffer of stream <[fp]>.
+
+<<__fpending>> returns the number of bytes in the output buffer of stream <[fp]>.
+
+<<__flbf>> returns nonzero if stream <[fp]> is line-buffered, and <<0>> if not.
+
+<<__freadable>> returns nonzero if stream <[fp]> may be read, and <<0>> if not.
+
+<<__fwritable>> returns nonzero if stream <[fp]> may be written, and <<0>> if not.
+
+<<__freading>> returns nonzero if stream <[fp]> if the last operation on
+it was a read, or if it read-only, and <<0>> if not.
+
+<<__fwriting>> returns nonzero if stream <[fp]> if the last operation on
+it was a write, or if it write-only, and <<0>> if not.
+
+PORTABILITY
+These functions originate from Solaris and are also provided by GNU libc.
+
+No supporting OS subroutines are required.
+*/
+
+#ifndef __rtems__
+
+#include <_ansi.h>
+#include <stdio.h>
+
+/* Subroutine versions of the inline or macro functions. */
+
+size_t
+_DEFUN(__fbufsize, (fp),
+ FILE * fp)
+{
+ return (size_t) fp->_bf._size;
+}
+
+size_t
+_DEFUN(__fpending, (fp),
+ FILE * fp)
+{
+ return fp->_p - fp->_bf._base;
+}
+
+int
+_DEFUN(__flbf, (fp),
+ FILE * fp)
+{
+ return (fp->_flags & __SLBF) != 0;
+}
+
+int
+_DEFUN(__freadable, (fp),
+ FILE * fp)
+{
+ return (fp->_flags & (__SRD | __SRW)) != 0;
+}
+
+int
+_DEFUN(__fwritable, (fp),
+ FILE * fp)
+{
+ return (fp->_flags & (__SWR | __SRW)) != 0;
+}
+
+int
+_DEFUN(__freading, (fp),
+ FILE * fp)
+{
+ return (fp->_flags & __SRD) != 0;
+}
+
+int
+_DEFUN(__fwriting, (fp),
+ FILE * fp)
+{
+ return (fp->_flags & __SWR) != 0;
+}
+
+#endif /* __rtems__ */