summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--file.c3
-rw-r--r--sprintf.c5
-rw-r--r--string.c13
-rw-r--r--test/ruby/test_sprintf.rb10
4 files changed, 23 insertions, 8 deletions
@@ -4090,6 +4090,9 @@ static VALUE
str_shrink(VALUE str)
{
rb_str_resize(str, RSTRING_LEN(str));
return str;
}
@@ -937,6 +937,8 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
if (RTEST(ruby_verbose)) rb_warn("%s", mesg);
}
rb_str_resize(result, blen);
return result;
}
@@ -1163,6 +1165,8 @@ ruby_vsprintf0(VALUE result, char *p, const char *fmt, va_list ap)
buffer.value = 0;
BSD_vfprintf(&f, fmt, ap);
RBASIC_SET_CLASS_RAW(result, klass);
rb_str_resize(result, (char *)f._p - RSTRING_PTR(result));
#undef f
}
@@ -1183,7 +1187,6 @@ rb_enc_vsprintf(rb_encoding *enc, const char *fmt, va_list ap)
rb_enc_associate(result, enc);
}
ruby_vsprintf0(result, RSTRING_PTR(result), fmt, ap);
-
return result;
}
@@ -2498,7 +2498,6 @@ rb_str_modify_expand(VALUE str, long expand)
else if (expand > 0) {
RESIZE_CAPA_TERM(str, len + expand, termlen);
}
- ENC_CODERANGE_CLEAR(str);
}
/* As rb_str_modify(), but don't clear coderange */
@@ -3073,16 +3072,16 @@ rb_str_set_len(VALUE str, long len)
VALUE
rb_str_resize(VALUE str, long len)
{
- long slen;
- int independent;
-
if (len < 0) {
rb_raise(rb_eArgError, "negative string size (or size too big)");
}
- independent = str_independent(str);
- ENC_CODERANGE_CLEAR(str);
- slen = RSTRING_LEN(str);
{
long capa;
@@ -507,6 +507,16 @@ class TestSprintf < Test::Unit::TestCase
end
end
def test_named_default
h = Hash.new('world')
assert_equal("hello world", "hello %{location}" % h)