summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Djurfeldt <djurfeldt@nada.kth.se>1998-10-30 08:24:07 +0000
committerMikael Djurfeldt <djurfeldt@nada.kth.se>1998-10-30 08:24:07 +0000
commit64e764482e5d9b4686e23622e7efcfe44ce45b5e (patch)
treeefa74708f7bfd3f2077f942b4463592ef53d28a1
parentb8af68db8849748bb570e403a41ecbacae2e6bfb (diff)
downloadguile-64e764482e5d9b4686e23622e7efcfe44ce45b5e.tar.gz
* ports.c (scm_add_to_port_table, scm_remove_from_port_table):
Handle new fields. (scm_generic_fgets), fports.c (local_fgets): Use a loop to read unread characters. Use SCM_TRY_CLRDY instead of SCM_CLRDY.
-rw-r--r--libguile/fports.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/libguile/fports.c b/libguile/fports.c
index 4dcc997d2..3a86a047d 100644
--- a/libguile/fports.c
+++ b/libguile/fports.c
@@ -397,10 +397,12 @@ static int
local_fgetc (SCM port)
{
FILE *s = (FILE *) SCM_STREAM (port);
+#if 0
pre_read (port);
if (feof (s))
return EOF;
else
+#endif
return fgetc (s);
}
@@ -414,7 +416,9 @@ local_fgets (SCM port, int *len)
char *p; /* pointer to current buffer position */
int limit = 80; /* current size of buffer */
+#if 0
pre_read (port);
+#endif
/* If this is a socket port or something where we can't rely on
ftell to determine how much we've read, then call the generic
@@ -435,11 +439,11 @@ local_fgets (SCM port, int *len)
/* If a char has been pushed onto the port with scm_ungetc,
read that first. */
- if (SCM_CRDYP (port))
+ while (SCM_CRDYP (port))
{
buf[*len] = SCM_CGETUN (port);
- SCM_CLRDY (port);
- if (buf[(*len)++] == '\n')
+ SCM_TRY_CLRDY (port);
+ if (buf[(*len)++] == '\n' || *len == limit - 1)
{
buf[*len] = '\0';
return buf;
@@ -519,7 +523,9 @@ local_fputc (int c, SCM port)
{
FILE *fp = (FILE *) SCM_STREAM (port);
+#if 0
pre_write (port);
+#endif
return fputc (c, fp);
}
@@ -527,7 +533,9 @@ static int
local_fputs (char *s, SCM port)
{
FILE *fp = (FILE *) SCM_STREAM (port);
+#if 0
pre_write (port);
+#endif
return fputs (s, fp);
}
@@ -538,7 +546,9 @@ local_ffwrite (char *ptr,
SCM port)
{
FILE *fp = (FILE *) SCM_STREAM (port);
+#if 0
pre_write (port);
+#endif
return ffwrite (ptr, size, nitems, fp);
}