[svn commit] r443 - trunk/gc
jimb at red-bean.com
jimb at red-bean.com
Wed Apr 27 14:39:39 CDT 2005
Author: jimb
Date: Wed Apr 27 14:39:38 2005
New Revision: 443
Modified:
trunk/gc/ports.c
trunk/gc/ports.h
Log:
Check that ports are actually open before we use them, as advertised.
Modified: trunk/gc/ports.c
==============================================================================
--- trunk/gc/ports.c (original)
+++ trunk/gc/ports.c Wed Apr 27 14:39:38 2005
@@ -193,11 +193,12 @@
struct port *
-mn__check_input_port (tagged_t obj)
+mn__check_open_input_port (tagged_t obj)
{
struct port *p = mn__check_port (obj);
- if (p->type != port_type_input)
+ if (p->type != port_type_input
+ || ! p->stream)
abort ();
return p;
@@ -205,11 +206,12 @@
struct port *
-mn__check_output_port (tagged_t obj)
+mn__check_open_output_port (tagged_t obj)
{
struct port *p = mn__check_port (obj);
- if (p->type != port_type_output)
+ if (p->type != port_type_output
+ || ! p->stream)
abort ();
return p;
@@ -360,7 +362,7 @@
mn__begin_incoherent (c);
{
- result = feof (mn__check_input_port (port->obj)->stream);
+ result = feof (mn__check_open_input_port (port->obj)->stream);
}
mn__end_incoherent (c);
@@ -373,7 +375,7 @@
{
mn__begin_incoherent (c);
{
- clearerr (mn__check_input_port (port->obj)->stream);
+ clearerr (mn__check_open_input_port (port->obj)->stream);
}
mn__end_incoherent (c);
}
@@ -402,7 +404,7 @@
mn__begin_incoherent (c);
{
- struct port *p = mn__check_output_port (port->obj);
+ struct port *p = mn__check_open_output_port (port->obj);
result = fputc (ch, p->stream);
@@ -422,7 +424,7 @@
mn__begin_incoherent (c);
{
- struct port *p = mn__check_output_port (port->obj);
+ struct port *p = mn__check_open_output_port (port->obj);
result = fputwc (ch, p->stream);
@@ -442,7 +444,7 @@
mn__begin_incoherent (c);
{
- struct port *p = mn__check_output_port (port->obj);
+ struct port *p = mn__check_open_output_port (port->obj);
if (fputs (str, p->stream) == EOF)
{
@@ -463,7 +465,7 @@
mn__begin_incoherent (c);
{
- struct port *p = mn__check_output_port (port->obj);
+ struct port *p = mn__check_open_output_port (port->obj);
if (fputws (wcs, p->stream) == WEOF)
{
@@ -484,7 +486,7 @@
mn__begin_incoherent (c);
{
- struct port *p = mn__check_input_port (port->obj);
+ struct port *p = mn__check_open_input_port (port->obj);
result = fgetc (p->stream);
if (result == EOF)
@@ -503,7 +505,7 @@
mn__begin_incoherent (c);
{
- struct port *p = mn__check_input_port (port->obj);
+ struct port *p = mn__check_open_input_port (port->obj);
result = fgetwc (p->stream);
if (result == WEOF)
@@ -522,7 +524,7 @@
mn__begin_incoherent (c);
{
- struct port *p = mn__check_input_port (port->obj);
+ struct port *p = mn__check_open_input_port (port->obj);
result = ungetc (ch, p->stream);
@@ -542,7 +544,7 @@
mn__begin_incoherent (c);
{
- struct port *p = mn__check_input_port (port->obj);
+ struct port *p = mn__check_open_input_port (port->obj);
result = ungetwc (ch, p->stream);
Modified: trunk/gc/ports.h
==============================================================================
--- trunk/gc/ports.h (original)
+++ trunk/gc/ports.h Wed Apr 27 14:39:38 2005
@@ -33,8 +33,8 @@
/* If OBJ is a port / open input port / open output port, return a
pointer to its port structure. Otherwise, abort. */
struct port *mn__check_port (tagged_t obj);
-struct port *mn__check_input_port (tagged_t obj);
-struct port *mn__check_output_port (tagged_t obj);
+struct port *mn__check_open_input_port (tagged_t obj);
+struct port *mn__check_open_output_port (tagged_t obj);
/* Initialize the ports module. */
void mn__gc_ports_init (mn_call *);
More information about the Minor
mailing list