Take advantage of the current libc sizeof(FILE) breakage (__sF[]) and

try a hopefully more robust stdin/stdout/stderr.  This costs an indirect
pointer fetch, but saves us from changes in 'FILE'.  The __stdin stuff
is there to not pollute application name space if the application does
not use <stdio.h> and also in case something depended on the current
behavior where stdin etc was a #define.

Reviewed by:	eischen, dillon
This commit is contained in:
Peter Wemm 2001-02-12 02:50:30 +00:00
parent 4be19dddae
commit 9b8ff47f40
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=72391
2 changed files with 10 additions and 3 deletions

View file

@ -132,6 +132,9 @@ typedef struct __sFILE {
__BEGIN_DECLS
extern FILE __sF[];
extern FILE *__stdin;
extern FILE *__stdout;
extern FILE *__stderr;
__END_DECLS
#define __SLBF 0x0001 /* line buffered */
@ -194,9 +197,9 @@ __END_DECLS
#define SEEK_END 2 /* set file offset to EOF plus offset */
#endif
#define stdin (&__sF[0])
#define stdout (&__sF[1])
#define stderr (&__sF[2])
#define stdin (__stdin)
#define stdout (__stdout)
#define stderr (__stderr)
/*
* Functions defined in ANSI C standard.

View file

@ -75,6 +75,10 @@ FILE __sF[3] = {
struct glue __sglue = { &uglue, 3, __sF };
static struct glue *lastglue = &uglue;
FILE *__stdin = &__sF[0];
FILE *__stdout = &__sF[1];
FILE *__stderr = &__sF[2];
static struct glue * moreglue __P((int));
static spinlock_t thread_lock = _SPINLOCK_INITIALIZER;