size_t last;
SCM_VALIDATE_STRING (1, str);
- dest = SCM_I_STRING_CHARS (str);
- scm_i_get_substring_spec (SCM_I_STRING_LENGTH (str),
+ scm_i_get_substring_spec (scm_i_string_length (str),
start, &offset, end, &last);
dest += offset;
read_len = last - offset;
don't touch the file descriptor. otherwise the
"return immediately if something is available" rule may
be violated. */
+ dest = scm_i_string_writable_chars (str);
chars_read = scm_take_from_input_buffers (port, dest, read_len);
+ scm_i_string_stop_writing ();
fdes = SCM_FPORT_FDES (port);
}
if (chars_read == 0 && read_len > 0) /* don't confuse read_len == 0 with
EOF. */
{
+ dest = scm_i_string_writable_chars (str);
SCM_SYSCALL (chars_read = read (fdes, dest, read_len));
+ scm_i_string_stop_writing ();
if (chars_read == -1)
{
if (SCM_EBLOCK (errno))
"@end itemize")
#define FUNC_NAME s_scm_write_string_partial
{
- char *src;
+ const char *src;
long write_len;
int fdes;
size_t last;
SCM_VALIDATE_STRING (1, str);
- src = SCM_I_STRING_CHARS (str);
- scm_i_get_substring_spec (SCM_I_STRING_LENGTH (str),
+ src = scm_i_string_chars (str);
+ scm_i_get_substring_spec (scm_i_string_length (str),
start, &offset, end, &last);
src += offset;
write_len = last - offset;