Refactor `sprintf()` code.

parent 31bc2b00
......@@ -801,13 +801,6 @@ retry:
int base;
mrb_int len;
switch (*p) {
case 'd':
case 'i':
sign = 1; break;
default:
break;
}
if (flags & FSHARP) {
switch (*p) {
case 'o': prefix = "0"; break;
......@@ -845,22 +838,14 @@ retry:
case 'b':
case 'B':
base = 2; break;
case 'u':
case 'd':
case 'i':
sign = 1;
case 'u':
default:
base = 10; break;
}
if (base == 2) {
if (v < 0 && !sign) {
val = mrb_fix2binstr(mrb, mrb_fixnum_value(v), base);
dots = 1;
}
else {
val = mrb_fixnum_to_str(mrb, mrb_fixnum_value(v), base);
}
}
if (sign) {
if (v > 0) {
if (flags & FPLUS) {
......@@ -872,37 +857,33 @@ retry:
width--;
}
}
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;
else {
sc = '-';
width--;
v = -v;
}
mrb_assert(base == 10);
snprintf(nbuf, sizeof(nbuf), "%" MRB_PRId, v);
s = nbuf;
}
else {
s = nbuf;
if (base != 10 && v < 0) {
if (v < 0) {
dots = 1;
}
switch (base) {
case 2:
if (v < 0) {
val = mrb_fix2binstr(mrb, mrb_fixnum_value(v), base);
}
else {
val = mrb_fixnum_to_str(mrb, mrb_fixnum_value(v), base);
}
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;
......@@ -930,11 +911,6 @@ retry:
len = (mrb_int)size;
}
if (dots) {
prec -= 2;
width -= 2;
}
if (*p == 'X') {
char *pp = s;
int c;
......@@ -990,7 +966,11 @@ retry:
int plen = (int)strlen(prefix);
PUSH(prefix, plen);
}
if (dots) PUSH("..", 2);
if (dots) {
prec -= 2;
width -= 2;
PUSH("..", 2);
}
if (prec > len) {
CHECK(prec - len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment