Peeks do not consume EOFs.
authorMark H Weaver <mhw@netris.org>
Sun, 31 Mar 2013 23:06:51 +0000 (19:06 -0400)
committerMark H Weaver <mhw@netris.org>
Thu, 4 Apr 2013 21:48:37 +0000 (17:48 -0400)
commit45c0878b8665182f06a917e391169031c1dc7db6
tree8c7dfcacacdc33272d7e5e7c30625397fd607669
parent0426b3f8f8036364aca13c24ef769283937faa3d
Peeks do not consume EOFs.

Fixes <http://bugs.gnu.org/12216>.

* libguile/ports-internal.h (struct scm_port_internal): Add
  'pending_eof' flag.

* libguile/ports.c (scm_i_set_pending_eof, scm_i_clear_pending_eof): New
  static functions.
  (scm_new_port_table_entry): Initialize 'pending_eof'.
  (scm_i_fill_input): Check for 'pending_eof'.
  (scm_i_peek_byte_or_eof): Set 'pending_eof' flag before returning EOF.
  (scm_end_input, scm_unget_byte, scm_seek, scm_truncate): Clear
  'pending_eof'.
  (scm_peek_char): Set 'pending_eof' flag before returning EOF.

* test-suite/tests/ports.test ("pending EOF behavior"): Add tests.
libguile/ports-internal.h
libguile/ports.c
test-suite/tests/ports.test