mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Check the room including the space to fill
This commit is contained in:
parent
0cc989696e
commit
b043dd9c5d
1 changed files with 9 additions and 7 deletions
16
sprintf.c
16
sprintf.c
|
@ -460,14 +460,16 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||
blen += n;
|
||||
}
|
||||
else if ((flags & FMINUS)) {
|
||||
CHECK(n);
|
||||
--width;
|
||||
CHECK(n + (width > 0 ? width : 0));
|
||||
rb_enc_mbcput(c, &buf[blen], enc);
|
||||
blen += n;
|
||||
if (width > 1) FILL(' ', width-1);
|
||||
if (width > 0) FILL_(' ', width);
|
||||
}
|
||||
else {
|
||||
if (width > 1) FILL(' ', width-1);
|
||||
CHECK(n);
|
||||
--width;
|
||||
CHECK(n + (width > 0 ? width : 0));
|
||||
if (width > 0) FILL_(' ', width);
|
||||
rb_enc_mbcput(c, &buf[blen], enc);
|
||||
blen += n;
|
||||
}
|
||||
|
@ -512,16 +514,16 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
|||
/* need to adjust multi-byte string pos */
|
||||
if ((flags&FWIDTH) && (width > slen)) {
|
||||
width -= (int)slen;
|
||||
CHECK(len + width);
|
||||
if (!(flags&FMINUS)) {
|
||||
FILL(' ', width);
|
||||
FILL_(' ', width);
|
||||
width = 0;
|
||||
}
|
||||
CHECK(len);
|
||||
memcpy(&buf[blen], RSTRING_PTR(str), len);
|
||||
RB_GC_GUARD(str);
|
||||
blen += len;
|
||||
if (flags&FMINUS) {
|
||||
FILL(' ', width);
|
||||
FILL_(' ', width);
|
||||
}
|
||||
rb_enc_associate(result, enc);
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue