syswrite(p1)
public
Appends the given string to the
underlying buffer string of
strio. The stream must be opened for writing. If the argument is not
a string, it will be converted to a string using to_s. Returns the
number of bytes written. See IO#write.
Show source
/*
* call-seq:
* strio.write(string) -> integer
* strio.syswrite(string) -> integer
*
* Appends the given string to the underlying buffer string of *strio*.
* The stream must be opened for writing. If the argument is not a
* string, it will be converted to a string using <code>to_s</code>.
* Returns the number of bytes written. See IO
*/
static VALUE
strio_write(self, str)
VALUE self, str;
{
struct StringIO *ptr = writable(StringIO(self));
long len, olen;
if (TYPE(str) != T_STRING)
str = rb_obj_as_string(str);
len = RSTRING(str)->len;
if (!len) return INT2FIX(0);
check_modifiable(ptr);
olen = RSTRING(ptr->string)->len;
if (ptr->flags & FMODE_APPEND) {
ptr->pos = olen;
}
if (ptr->pos == olen) {
rb_str_cat(ptr->string, RSTRING(str)->ptr, len);
}
else {
strio_extend(ptr, ptr->pos, len);
rb_str_update(ptr->string, ptr->pos, len, str);
}
OBJ_INFECT(ptr->string, self);
ptr->pos += len;
return LONG2NUM(len);
}