summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Novoa III <mjn3@codepoet.org>2002-08-25 22:11:29 +0000
committerManuel Novoa III <mjn3@codepoet.org>2002-08-25 22:11:29 +0000
commit7ceb5c35f2a2a63d3bd14254b8cfd1493298d6ec (patch)
tree772f71448d27ebcc028da4f65b368d623119fee4
parent9a1eb39a6018cdf98de8518a9dd68c67098b6dcb (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.
-rw-r--r--libc/stdio/stdio.c23
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);
}