summaryrefslogtreecommitdiff
path: root/sprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'sprintf.c')
-rw-r--r--sprintf.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/sprintf.c b/sprintf.c
index 5e85d9522f..3c0bc5cd2b 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -13,6 +13,7 @@
**********************************************************************/
#include "ruby.h"
+#include "re.h"
#include <ctype.h>
#include <math.h>
@@ -413,6 +414,23 @@ rb_f_sprintf(argc, argv)
len = prec;
}
}
+ {
+ char *s, *send;
+ long l;
+
+ s = RSTRING(str)->ptr;
+ send = s + RSTRING(str)->len;
+ l = 0;
+ while (s < send) {
+ long n = mbclen(*s);
+ if (l + n > len) {
+ len = l;
+ break;
+ }
+ l += n;
+ s += n;
+ }
+ }
if (flags&FWIDTH) {
if (width > len) {
CHECK(width);