[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