summaryrefslogtreecommitdiff
path: root/numeric.c
diff options
context:
space:
mode:
Diffstat (limited to 'numeric.c')
-rw-r--r--numeric.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/numeric.c b/numeric.c
index 29f733b83a..3d01a641de 100644
--- a/numeric.c
+++ b/numeric.c
@@ -954,15 +954,20 @@ rb_fix2str(x, base)
VALUE x;
int base;
{
- char fmt[4], buf[22];
+ char fmt[4], buf[22], *b = buf;
+ long val = FIX2LONG(x);
fmt[0] = '%'; fmt[1] = 'l'; fmt[3] = '\0';
if (base == 10) fmt[2] = 'd';
else if (base == 16) fmt[2] = 'x';
else if (base == 8) fmt[2] = 'o';
else rb_raise(rb_eArgError, "illegal radix %d", base);
+ if (val < 0) {
+ val = -val;
+ *b++ = '-';
+ }
- sprintf(buf, fmt, FIX2LONG(x));
+ sprintf(b, fmt, val);
return rb_str_new2(buf);
}