diff options
author | Manuel Novoa III <mjn3@codepoet.org> | 2002-08-25 22:11:29 +0000 |
---|---|---|
committer | Manuel Novoa III <mjn3@codepoet.org> | 2002-08-25 22:11:29 +0000 |
commit | 7ceb5c35f2a2a63d3bd14254b8cfd1493298d6ec (patch) | |
tree | 772f71448d27ebcc028da4f65b368d623119fee4 /libc/stdio | |
parent | 9a1eb39a6018cdf98de8518a9dd68c67098b6dcb (diff) |
Changed fclose behavior when custom streams were enabled. Previously,
the cookie pointer was set to NULL as a debugging aid. However,
some of the perl 5.8 test rely on being able to close stderr and
still try writing to it. So now, the cookie pointer and handler
function pointers are set to that it is a "normal" file with a
file descriptor of -1.
Note: The cookie pointer is reset to NULL if the FILE struct is
free'd by fclose.
Diffstat (limited to 'libc/stdio')
-rw-r--r-- | libc/stdio/stdio.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/libc/stdio/stdio.c b/libc/stdio/stdio.c index bd6a7263c..b0b046900 100644 --- a/libc/stdio/stdio.c +++ b/libc/stdio/stdio.c @@ -36,6 +36,15 @@ * and error state. * The above changes should take care of a problem initially reported * by "Steven J. Hill" <sjhill@realitydiluted.com>. + * + * 8-25-2002 + * Changed fclose behavior when custom streams were enabled. Previously, + * the cookie pointer was set to NULL as a debugging aid. However, + * some of the perl 5.8 test rely on being able to close stderr and + * still try writing to it. So now, the cookie pointer and handler + * function pointers are set to that it is a "normal" file with a + * file descriptor of -1. Note: The cookie pointer is reset to NULL + * if the FILE struct is free'd by fclose. */ /* Before we include anything, convert L_ctermid to L_ctermid_function @@ -2019,7 +2028,11 @@ int fclose(register FILE *stream) rv = EOF; } #ifdef __STDIO_GLIBC_CUSTOM_STREAMS - stream->cookie = NULL; /* To aid debugging... */ + stream->cookie = &(stream->filedes); + stream->gcs.read = _cs_read; + stream->gcs.write = _cs_write; + stream->gcs.seek = 0; /* The internal seek func handles normals. */ + stream->gcs.close = _cs_close; #endif stream->filedes = -1; /* To aid debugging... */ @@ -2035,6 +2048,7 @@ int fclose(register FILE *stream) /* At this point, any dangling refs to the stream are the result of * a programming bug... so free the unlocked stream. */ if (stream->modeflags & __FLAG_FREEFILE) { + stream->cookie = NULL; /* To aid debugging... */ free(stream); } @@ -2053,7 +2067,11 @@ int fclose(register FILE *stream) } #ifdef __STDIO_GLIBC_CUSTOM_STREAMS - stream->cookie = NULL; /* To aid debugging... */ + stream->cookie = &(stream->filedes); + stream->gcs.read = _cs_read; + stream->gcs.write = _cs_write; + stream->gcs.seek = 0; /* The internal seek func handles normals. */ + stream->gcs.close = _cs_close; #endif stream->filedes = -1; /* To aid debugging... */ @@ -2062,6 +2080,7 @@ int fclose(register FILE *stream) /* At this point, any dangling refs to the stream are the result of * a programming bug... so free the unlocked stream. */ if (stream->modeflags & __FLAG_FREEFILE) { + stream->cookie = NULL; /* To aid debugging... */ free(stream); } |