--- strports.c.~1.105.~ 2005-01-28 08:25:34.000000000 +1100 +++ strports.c 2005-02-14 11:20:05.000000000 +1100 @@ -142,18 +142,14 @@ scm_t_port *pt = SCM_PTAB_ENTRY (port); const char *input = (char *) data; - while (size > 0) - { - int space = pt->write_end - pt->write_pos; - int write_len = (size > space) ? space : size; - - memcpy ((char *) pt->write_pos, input, write_len); - pt->write_pos += write_len; - size -= write_len; - input += write_len; - if (write_len == space) - st_flush (port); - } + /* if not enough room for "size" then make that amount and an additional + SCM_WRITE_BLOCK */ + if (size > pt->write_end - pt->write_pos) + st_resize_port (pt, pt->write_pos - pt->write_buf + + size + SCM_WRITE_BLOCK); + + memcpy ((char *) pt->write_pos, input, size); + pt->write_pos += size; } static void