summaryrefslogtreecommitdiffstats
path: root/newlib/libc/include
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2006-09-26 21:22:19 +0000
committerJeff Johnston <jjohnstn@redhat.com>2006-09-26 21:22:19 +0000
commite5e148d15bacc36f205aa49edea0fc53df2a38c0 (patch)
treeb3daac4ea5f2db51fa5c5e10722e04f3b63a57c5 /newlib/libc/include
parent1aeca89244e9560c7494792cf4524547038504e8 (diff)
downloadcygnal-e5e148d15bacc36f205aa49edea0fc53df2a38c0.tar.gz
cygnal-e5e148d15bacc36f205aa49edea0fc53df2a38c0.tar.bz2
cygnal-e5e148d15bacc36f205aa49edea0fc53df2a38c0.zip
2006-09-26 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/stdio.h[_REENT_SMALL]: Do not allow macros for clearerr, feof, or fileno. * libc/include/sys/reent.h[_REENT_SMALL](struct _reent): Change the dummy std stream scheme to use pointers to const external fake files, one for each standard stream. * libc/stdio/local.h (CHECK_INIT): Change to take a file pointer argument. For _REENT_SMALL, reset the file pointer if it matches one of the fake std stream pointers. * libc/stdio/clearerr.c: Fix CHECK_INIT macro to add file pointer argument. * libc/stdio/fclose.c: Ditto. * libc/stdio/feof.c: Ditto. * libc/stdio/ferror.c: Ditto. * libc/stdio/fflush.c: Ditto. * libc/stdio/fgetc.c: Ditto. * libc/stdio/fgets.c: Ditto. * libc/stdio/fileno.c: Ditto. * libc/stdio/findfp.c: Ditto. * libc/stdio/fputc.c: Ditto. * libc/stdio/fputs.c: Ditto. * libc/stdio/fread.c: Ditto. * libc/stdio/freopen.c: Ditto. * libc/stdio/fseek.c: Ditto. * libc/stdio/ftell.c: Ditto. * libc/stdio/fwrite.c: Ditto. * libc/stdio/getc.c: Ditto. * libc/stdio/getdelim.c: Ditto. * libc/stdio/putc.c: Ditto. * libc/stdio/refill.c: Ditto. * libc/stdio/setvbuf.c: Ditto. * libc/stdio/ungetc.c: Ditto. * libc/stdio/vfprintf.c: Ditto. * libc/stdio/vfscanf.c: Ditto. * libc/stdio/wbuf.c: Ditto.: Ditto. * libc/stdio/wsetup.c: Ditto. * libc/stdio64/freopen64.c: Ditto. * libc/stdio64/fseeko64.c: Ditto. * libc/stdio64/ftello64.c: Ditto. * libc/machine/powerpc/vfprintf.c: Ditto. * libc/machine/powerpc/vfscanf.c: Ditto.
Diffstat (limited to 'newlib/libc/include')
-rw-r--r--newlib/libc/include/stdio.h2
-rw-r--r--newlib/libc/include/sys/reent.h35
2 files changed, 16 insertions, 21 deletions
diff --git a/newlib/libc/include/stdio.h b/newlib/libc/include/stdio.h
index 9f260214c..f99480d44 100644
--- a/newlib/libc/include/stdio.h
+++ b/newlib/libc/include/stdio.h
@@ -455,9 +455,11 @@ static __inline int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) {
#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
#define __sfileno(p) ((p)->_file)
+#ifndef _REENT_SMALL
#define feof(p) __sfeof(p)
#define ferror(p) __sferror(p)
#define clearerr(p) __sclearerr(p)
+#endif
#if 0 /*ndef __STRICT_ANSI__ - FIXME: must initialize stdio first, use fn */
#define fileno(p) __sfileno(p)
diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
index 3ef605828..a7d4f968f 100644
--- a/newlib/libc/include/sys/reent.h
+++ b/newlib/libc/include/sys/reent.h
@@ -13,6 +13,8 @@ extern "C" {
#include <_ansi.h>
#include <sys/_types.h>
+#define _NULL 0
+
#ifndef __Long
#if __LONG_MAX__ == 2147483647L
#define __Long long
@@ -157,8 +159,8 @@ struct __sFILE_fake {
struct _reent *_data;
};
-/* CHECK_INIT() comes from stdio/local.h; be sure to include that. */
-# define _REENT_SMALL_CHECK_INIT(ptr) CHECK_INIT(ptr)
+/* CHECK_STD_INIT() comes from stdio/local.h; be sure to include that. */
+# define _REENT_SMALL_CHECK_INIT(ptr) CHECK_STD_INIT(ptr)
#else
# define _REENT_SMALL_CHECK_INIT(ptr) /* nothing */
#endif
@@ -382,15 +384,18 @@ struct _reent
struct _glue __sglue; /* root of glue chain */
__FILE *__sf; /* file descriptors */
- struct __sFILE_fake __sf_fake; /* fake initial stdin/out/err */
struct _misc_reent *_misc; /* strtok, multibyte states */
char *_signal_buf; /* strsignal */
};
+extern const struct __sFILE_fake __sf_fake_stdin;
+extern const struct __sFILE_fake __sf_fake_stdout;
+extern const struct __sFILE_fake __sf_fake_stderr;
+
#define _REENT_INIT(var) \
- { (__FILE *)&var.__sf_fake, \
- (__FILE *)&var.__sf_fake, \
- (__FILE *)&var.__sf_fake, \
+ { (__FILE *)&__sf_fake_stdin, \
+ (__FILE *)&__sf_fake_stdout, \
+ (__FILE *)&__sf_fake_stderr, \
0, \
0, \
_NULL, \
@@ -410,15 +415,14 @@ struct _reent
{_NULL, 0, {_NULL}, _NULL}, \
{_NULL, 0, _NULL}, \
_NULL, \
- {_NULL, 0, 0, 0, 0, {_NULL, 0}, 0, _NULL}, \
_NULL, \
_NULL \
}
#define _REENT_INIT_PTR(var) \
- { var->_stdin = (__FILE *)&var->__sf_fake; \
- var->_stdout = (__FILE *)&var->__sf_fake; \
- var->_stderr = (__FILE *)&var->__sf_fake; \
+ { var->_stdin = (__FILE *)&__sf_fake_stdin; \
+ var->_stdout = (__FILE *)&__sf_fake_stdout; \
+ var->_stderr = (__FILE *)&__sf_fake_stderr; \
var->_errno = 0; \
var->_inc = 0; \
var->_emergency = _NULL; \
@@ -443,15 +447,6 @@ struct _reent
var->__sglue._niobs = 0; \
var->__sglue._iobs = _NULL; \
var->__sf = 0; \
- var->__sf_fake._p = _NULL; \
- var->__sf_fake._r = 0; \
- var->__sf_fake._w = 0; \
- var->__sf_fake._flags = 0; \
- var->__sf_fake._file = 0; \
- var->__sf_fake._bf._base = _NULL; \
- var->__sf_fake._bf._size = 0; \
- var->__sf_fake._lbfsize = 0; \
- var->__sf_fake._data = _NULL; \
var->_misc = _NULL; \
var->_signal_buf = _NULL; \
}
@@ -786,8 +781,6 @@ struct _reent
#endif /* !_REENT_SMALL */
-#define _NULL 0
-
/*
* All references to struct _reent are via this pointer.
* Internally, newlib routines that need to reference it should use _REENT.