X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/1cd779140dd74ddfaa62032882cb4745c2302cee..d8d9a8da05ec876acba81a559798eb5eeceb5a17:/libguile/r6rs-ports.c diff --git a/libguile/r6rs-ports.c b/libguile/r6rs-ports.c index 1b0aba406..2c2b657d7 100644 --- a/libguile/r6rs-ports.c +++ b/libguile/r6rs-ports.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, 2010, 2011, 2013, 2014 Free Software Foundation, Inc. +/* Copyright (C) 2009, 2010, 2011, 2013-2015 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -299,9 +299,10 @@ cbip_setvbuf (SCM port, long read_size, long write_size) switch (read_size) { case 0: - /* Unbuffered: keep PORT's bytevector as is (it will be used in - future 'scm_c_read' calls), but point to the one-byte buffer. */ - pt->read_buf = &pt->shortbuf; + /* Unbuffered: keep using PORT's bytevector as the underlying + buffer (it will also be used by future 'scm_c_read' calls.) */ + assert (SCM_BYTEVECTOR_LENGTH (bv) >= 1); + pt->read_buf = (unsigned char *) SCM_BYTEVECTOR_CONTENTS (bv); pt->read_buf_size = 1; break; @@ -385,9 +386,11 @@ cbip_fill_input (SCM port) if (buffered) { - /* Make sure the buffer isn't corrupt. BV can be passed directly - to READ_PROC. */ - assert (c_port->read_buf_size == SCM_BYTEVECTOR_LENGTH (bv)); + /* Make sure the buffer isn't corrupt. Its size can be 1 when + someone called 'setvbuf' with _IONBF. BV can be passed + directly to READ_PROC. */ + assert (c_port->read_buf_size == SCM_BYTEVECTOR_LENGTH (bv) + || c_port->read_buf_size == 1); c_port->read_pos = (unsigned char *) SCM_BYTEVECTOR_CONTENTS (bv); } else