diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-01-07 12:23:17 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-01-07 12:23:17 +0900 |
| commit | 7c82bfa7fe17ef7b44d55f058bb4be14eb7e62e0 (patch) | |
| tree | 39afece57ee759b9cd33b793ee524f5f45349994 /mrbgems/mruby-sprintf/src/sprintf.c | |
| parent | 3cf5af681af4b41122bb313d8a98eb675dc6bd01 (diff) | |
| download | mruby-7c82bfa7fe17ef7b44d55f058bb4be14eb7e62e0.tar.gz mruby-7c82bfa7fe17ef7b44d55f058bb4be14eb7e62e0.zip | |
mruby-sprintf to use mrb_int formatting macros; ref #3076
Diffstat (limited to 'mrbgems/mruby-sprintf/src/sprintf.c')
| -rw-r--r-- | mrbgems/mruby-sprintf/src/sprintf.c | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 33e0931f9..f8ca217ac 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -759,7 +759,7 @@ retry: case 'B': case 'u': { mrb_value val = GETARG(); - char fbuf[32], nbuf[68], *s; + char nbuf[68], *s; const char *prefix = NULL; int sign = 0, dots = 0; char sc = 0; @@ -836,8 +836,6 @@ retry: } } if (sign) { - char c = *p; - if (c == 'i') c = 'd'; /* %d and %i are identical */ if (v < 0) { v = -v; sc = '-'; @@ -851,28 +849,40 @@ retry: sc = ' '; width--; } - if (base == 2) { - snprintf(nbuf, sizeof(nbuf), "%s", RSTRING_PTR(val)); - } - else { - snprintf(fbuf, sizeof(fbuf), "%%l%c", c); - snprintf(nbuf, sizeof(nbuf), fbuf, v); + switch (base) { + case 2: + strncpy(nbuf, RSTRING_PTR(val), sizeof(nbuf)); + break; + case 8: + snprintf(nbuf, sizeof(nbuf), "%"MRB_PRIo, v); + break; + case 10: + snprintf(nbuf, sizeof(nbuf), "%"MRB_PRId, v); + break; + case 16: + snprintf(nbuf, sizeof(nbuf), "%"MRB_PRIx, v); + break; } s = nbuf; } else { - char c = *p; - if (c == 'X') c = 'x'; s = nbuf; if (v < 0) { dots = 1; } - if (base == 2) { - snprintf(++s, sizeof(nbuf) - 1, "%s", RSTRING_PTR(val)); - } - else { - snprintf(fbuf, sizeof(fbuf), "%%l%c", c); - snprintf(++s, sizeof(nbuf) - 1, fbuf, v); + switch (base) { + case 2: + strncpy(++s, RSTRING_PTR(val), sizeof(nbuf)-1); + break; + case 8: + snprintf(++s, sizeof(nbuf)-1, "%"MRB_PRIo, v); + break; + case 10: + snprintf(++s, sizeof(nbuf)-1, "%"MRB_PRId, v); + break; + case 16: + snprintf(++s, sizeof(nbuf)-1, "%"MRB_PRIx, v); + break; } if (v < 0) { char d; |
