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:
parent
4be19dddae
commit
9b8ff47f40
@ -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.
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user