1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-29 16:30:19 +02:00

* 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.
This commit is contained in:
Mikael Djurfeldt 1998-10-30 08:24:07 +00:00
parent b8af68db88
commit 64e764482e

View file

@ -397,10 +397,12 @@ static int
local_fgetc (SCM port) local_fgetc (SCM port)
{ {
FILE *s = (FILE *) SCM_STREAM (port); FILE *s = (FILE *) SCM_STREAM (port);
#if 0
pre_read (port); pre_read (port);
if (feof (s)) if (feof (s))
return EOF; return EOF;
else else
#endif
return fgetc (s); return fgetc (s);
} }
@ -414,7 +416,9 @@ local_fgets (SCM port, int *len)
char *p; /* pointer to current buffer position */ char *p; /* pointer to current buffer position */
int limit = 80; /* current size of buffer */ int limit = 80; /* current size of buffer */
#if 0
pre_read (port); pre_read (port);
#endif
/* If this is a socket port or something where we can't rely on /* 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 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, /* If a char has been pushed onto the port with scm_ungetc,
read that first. */ read that first. */
if (SCM_CRDYP (port)) while (SCM_CRDYP (port))
{ {
buf[*len] = SCM_CGETUN (port); buf[*len] = SCM_CGETUN (port);
SCM_CLRDY (port); SCM_TRY_CLRDY (port);
if (buf[(*len)++] == '\n') if (buf[(*len)++] == '\n' || *len == limit - 1)
{ {
buf[*len] = '\0'; buf[*len] = '\0';
return buf; return buf;
@ -519,7 +523,9 @@ local_fputc (int c, SCM port)
{ {
FILE *fp = (FILE *) SCM_STREAM (port); FILE *fp = (FILE *) SCM_STREAM (port);
#if 0
pre_write (port); pre_write (port);
#endif
return fputc (c, fp); return fputc (c, fp);
} }
@ -527,7 +533,9 @@ static int
local_fputs (char *s, SCM port) local_fputs (char *s, SCM port)
{ {
FILE *fp = (FILE *) SCM_STREAM (port); FILE *fp = (FILE *) SCM_STREAM (port);
#if 0
pre_write (port); pre_write (port);
#endif
return fputs (s, fp); return fputs (s, fp);
} }
@ -538,7 +546,9 @@ local_ffwrite (char *ptr,
SCM port) SCM port)
{ {
FILE *fp = (FILE *) SCM_STREAM (port); FILE *fp = (FILE *) SCM_STREAM (port);
#if 0
pre_write (port); pre_write (port);
#endif
return ffwrite (ptr, size, nitems, fp); return ffwrite (ptr, size, nitems, fp);
} }