From d249c2e9398c16fe39663e2b60899a3ee2e0c661 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 7 Jul 2024 22:40:39 +0900 Subject: [PATCH] mruby-sprintf: separate filling high bits and converting negatives --- mrbgems/mruby-sprintf/src/sprintf.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 8d665fd43..17dd0365c 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -70,16 +70,15 @@ mrb_uint_to_cstr(char *buf, size_t len, mrb_int num, int base) const int mask = base-1; int shift; mrb_uint val = (uint64_t)num; - char d; if (num == 0) { buf[0] = '0'; buf[1] = '\0'; return buf; } switch (base) { - case 16: d = 'f'; shift = 4; break; - case 8: d = '7'; shift = 3; break; - case 2: d = '1'; shift = 1; break; + case 16: shift = 4; break; + case 8: shift = 3; break; + case 2: shift = 1; break; default: return NULL; } *--b = '\0'; @@ -89,9 +88,6 @@ mrb_uint_to_cstr(char *buf, size_t len, mrb_int num, int base) if (num < 0) { b = remove_sign_bits(b, base); - if (d && *b != d) { - *--b = d; - } } return b; @@ -728,6 +724,11 @@ retry: prec -= 2; width -= 2; PUSH("..", 2); + char c = sign_bits(base, p); + if (*s != c) { + FILL(c, 1); + prec--; width--; + } } if (prec > len) {