Index: file.c =================================================================== RCS file: /home/okabe/CVS_DB/w3m/file.c,v retrieving revision 1.22.2.68 diff -u -r1.22.2.68 file.c --- file.c 2000/12/26 16:55:33 1.22.2.68 +++ file.c 2000/12/28 18:46:52 @@ -453,8 +453,7 @@ else http_response_code = 0; - while (!is_eos(uf->stream)) { - tmp = StrmyUFgets(uf); + while ((tmp = StrmyUFgets(uf))->length) { #ifdef HTTP_DEBUG { FILE *ff; @@ -471,7 +470,7 @@ || (uf->scheme == SCM_NEWS && Str_news_endline(tmp) && - (is_eos(uf->stream) = TRUE)) + (iseos(uf->stream) = TRUE)) #endif /* USE_NNTP */ ) { if (!lineBuf2) @@ -4687,8 +4686,7 @@ #endif if (IStype(f->stream) != IST_ENCODED) f->stream = newEncodedStream(f->stream, f->encoding); - while (!is_eos(f->stream)) { - lineBuf2 = StrmyUFgets(f); + while ((lineBuf2 = StrmyUFgets(f))->length) { if (src) Strfputs(lineBuf2, src); linelen += lineBuf2->length; @@ -4704,7 +4702,7 @@ #ifdef USE_NNTP if (f->scheme == SCM_NEWS) { if (Str_news_endline(lineBuf2)) { - is_eos(f->stream) = TRUE; + iseos(f->stream) = TRUE; break; } } @@ -4924,8 +4922,7 @@ nlines = 0; if (IStype(uf->stream) != IST_ENCODED) uf->stream = newEncodedStream(uf->stream, uf->encoding); - while (!is_eos(uf->stream)) { - lineBuf2 = StrmyISgets(uf->stream); + while ((lineBuf2 = StrmyISgets(uf->stream))->length) { if (src) Strfputs(lineBuf2, src); linelen += lineBuf2->length; @@ -4947,7 +4944,7 @@ #ifdef USE_NNTP if (uf->scheme == SCM_NEWS) { if (Str_news_endline(lineBuf2)) { - is_eos(uf->stream) = TRUE; + iseos(uf->stream) = TRUE; break; } } @@ -5324,7 +5321,7 @@ #ifdef USE_NNTP if (uf.scheme == SCM_NEWS) { char c; - while (c = UFgetc(&uf), !is_eos(uf.stream)) { + while (c = UFgetc(&uf), !iseos(uf.stream)) { if (c == '\n') { if (check == 0) check++; Index: frame.c =================================================================== RCS file: /home/okabe/CVS_DB/w3m/frame.c,v retrieving revision 1.4.2.14 diff -u -r1.4.2.14 frame.c --- frame.c 2000/12/21 17:40:30 1.4.2.14 +++ frame.c 2000/12/28 17:50:57 @@ -730,7 +730,7 @@ } token_end: ; - } while (*p != '\0' || !is_eos(f2)); + } while (*p != '\0' || !iseos(f2)); while (t_stack--) fputs("\n", f1); ISclose(f2); Index: istream.c =================================================================== RCS file: /home/okabe/CVS_DB/w3m/istream.c,v retrieving revision 1.1.2.14 diff -u -r1.1.2.14 istream.c --- istream.c 2000/12/26 06:17:30 1.1.2.14 +++ istream.c 2000/12/28 19:37:00 @@ -29,19 +29,6 @@ static void ens_close(struct ens_handle *handle); static void -init_base_stream(BaseStream base, int bufsize) -{ - StreamBuffer sb = &base->stream; - sb->cur = sb->next = 0; - sb->size = bufsize; - if (bufsize > 0) - sb->buf = NewAtom_N(uchar, sb->size); - else - sb->buf = NULL; - base->iseos = FALSE; -} - -static void do_update(BaseStream base) { int len; @@ -66,6 +53,35 @@ return len; } +static void +init_buffer(BaseStream base, char *buf, int bufsize) +{ + StreamBuffer sb = &base->stream; + sb->size = bufsize; + sb->cur = 0; + if (buf) { + sb->buf = buf; + sb->next = bufsize; + } + else { + sb->buf = NewAtom_N(uchar, bufsize); + sb->next = 0; + } + base->iseos = FALSE; +} + +static void +init_base_stream(BaseStream base, int bufsize) +{ + init_buffer(base, NULL, bufsize); +} + +static void +init_str_stream(BaseStream base, Str s) +{ + init_buffer(base, s->ptr, s->length); +} + InputStream newInputStream(int des) { @@ -109,10 +125,7 @@ if (s == NULL) return NULL; stream = New(union input_stream); - init_base_stream(&stream->base, 0); - stream->str.stream.next = s->length; - stream->str.stream.size = s->length; - stream->str.stream.buf = s->ptr; + init_str_stream(&stream->base, s); stream->str.type = IST_STR; stream->str.handle = s; stream->str.read = (int (*)()) str_read; @@ -176,7 +189,7 @@ if (stream == NULL) return '\0'; base = &stream->base; - if (MUST_BE_UPDATED(base)) + if (!base->iseos && MUST_BE_UPDATED(base)) do_update(base); return POP_CHAR(base); } @@ -210,7 +223,7 @@ base = &stream->base; sb = &base->stream; - while (!stream->base.iseos) { + while (!base->iseos) { if (MUST_BE_UPDATED(base)) { do_update(base); } @@ -250,7 +263,7 @@ base = &stream->base; sb = &base->stream; - while (!stream->base.iseos) { + while (!base->iseos) { if (MUST_BE_UPDATED(base)) { do_update(base); } @@ -328,6 +341,15 @@ } } +int +ISeos(InputStream stream) +{ + BaseStream base = &stream->base; + if (!base->iseos && MUST_BE_UPDATED(base)) + do_update(base); + return base->iseos; +} + #ifdef USE_SSL Str ssl_get_certificate(InputStream stream) @@ -436,9 +458,9 @@ { if (handle->s == NULL || handle->pos == handle->s->length) { char *p; - if (is_eos(handle->is)) - return 0; handle->s = StrmyISgets(handle->is); + if (handle->s->length == 0) + return 0; cleanup_line(handle->s, PAGER_MODE); if (handle->encoding == ENC_BASE64) Strchop(handle->s); Index: istream.h =================================================================== RCS file: /home/okabe/CVS_DB/w3m/istream.h,v retrieving revision 1.1.2.8 diff -u -r1.1.2.8 istream.h --- istream.h 2000/12/26 06:17:30 1.1.2.8 +++ istream.h 2000/12/28 17:51:54 @@ -123,6 +123,7 @@ extern Str StrmyISgets(InputStream stream); extern int ISread(InputStream stream, Str buf, int count); extern int ISfileno(InputStream stream); +extern int ISeos(InputStream stream); #ifdef USE_SSL extern Str ssl_get_certificate(InputStream stream); #endif @@ -134,7 +135,8 @@ #define IST_ENCODED 4 #define IStype(stream) ((stream)->base.type) -#define is_eos(stream) ((stream)->base.iseos) +#define is_eos(stream) ISeos(stream) +#define iseos(stream) ((stream)->base.iseos) #define file_of(stream) ((stream)->file.handle->f) #define set_close(stream,closep) ((IStype(stream)==IST_FILE)?((stream)->file.handle->close=(closep)):0) #define str_of(stream) ((stream)->str.handle)