diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2006-09-26 21:22:19 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2006-09-26 21:22:19 +0000 |
commit | e5e148d15bacc36f205aa49edea0fc53df2a38c0 (patch) | |
tree | b3daac4ea5f2db51fa5c5e10722e04f3b63a57c5 /newlib/libc/include/sys/reent.h | |
parent | 1aeca89244e9560c7494792cf4524547038504e8 (diff) | |
download | cygnal-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/sys/reent.h')
-rw-r--r-- | newlib/libc/include/sys/reent.h | 35 |
1 files changed, 14 insertions, 21 deletions
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. |