summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-sprintf/src/sprintf.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-01-07 12:23:17 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2016-01-07 12:23:17 +0900
commit7c82bfa7fe17ef7b44d55f058bb4be14eb7e62e0 (patch)
tree39afece57ee759b9cd33b793ee524f5f45349994 /mrbgems/mruby-sprintf/src/sprintf.c
parent3cf5af681af4b41122bb313d8a98eb675dc6bd01 (diff)
downloadmruby-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.c44
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;