From 7f62113f4d4e29795561df9a0d52a6960e207252 Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 22 Nov 2002 14:30:33 +0000 Subject: * sprintf.c (rb_f_sprintf): preceding ".." for negative hexadecimal numbers should not appear if prec (e.g. %.4) is specified. * pack.c (NUM2I32): support platforms which does not have 32bit integers (e.g. Cray). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- sprintf.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'sprintf.c') diff --git a/sprintf.c b/sprintf.c index 190af52e86..f5e95423a1 100644 --- a/sprintf.c +++ b/sprintf.c @@ -404,7 +404,7 @@ rb_f_sprintf(argc, argv) if (base == 10) { rb_warning("negative number for %%u specifier"); } - else { + else if (!(flags&FPREC)) { strcpy(s, ".."); s += 2; } @@ -463,8 +463,10 @@ rb_f_sprintf(argc, argv) remove_sign_bits(++s, base); val = rb_str_new(0, 3+strlen(s)); t = RSTRING(val)->ptr; - strcpy(t, ".."); - t += 2; + if (!(flags&FPREC)) { + strcpy(t, ".."); + t += 2; + } switch (base) { case 16: if (s[0] != 'f') strcpy(t++, "f"); break; @@ -492,7 +494,7 @@ rb_f_sprintf(argc, argv) } if (prec < len) prec = len; width -= prec; - if (!(flags&(FZERO|FMINUS)) && s[0] != '.') { + if (!(flags&(FZERO|FMINUS)) && v >= 0) { CHECK(width); while (width-->0) { buf[blen++] = ' '; @@ -507,7 +509,7 @@ rb_f_sprintf(argc, argv) if (!(flags & FMINUS)) { char c = ' '; - if (s[0] == '.') { + if (v < 0) { c = '.'; if ((flags & FPREC) && prec > len) { pos = blen; @@ -524,7 +526,7 @@ rb_f_sprintf(argc, argv) } CHECK(prec - len); while (len < prec--) { - buf[blen++] = s[0]=='.'?'.':'0'; + buf[blen++] = v < 0 ? '.' : '0'; } PUSH(s, len); CHECK(width); -- cgit v1.2.3