aboutsummaryrefslogtreecommitdiffstats
path: root/vsnprintf.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-18 18:08:58 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-18 18:08:58 +0000
commitda55cfdf724beccb3fcfddf0ce318f9fb1b36c85 (patch)
tree3dff3d646ae83faa7b5c185728fcd7a8937626b3 /vsnprintf.c
parent81e40399fb33bdb0b942893a7251dd12b9f46c28 (diff)
downloadruby-da55cfdf724beccb3fcfddf0ce318f9fb1b36c85.tar.gz
* vsnprintf.c (BSD_vfprintf): use HEXPREFIX flag for prefix of %a.
[ruby-core:32841] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29531 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vsnprintf.c')
-rw-r--r--vsnprintf.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/vsnprintf.c b/vsnprintf.c
index 1f53bc4265..9c15a4b7b6 100644
--- a/vsnprintf.c
+++ b/vsnprintf.c
@@ -826,8 +826,10 @@ fp_begin: _double = va_arg(ap, double);
ch = 'g';
}
if (ch == 'a' || ch == 'A') {
+ flags |= HEXPREFIX;
--expt;
expsize = exponent(expstr, expt, ch + 'p' - 'a');
+ ch += 'x' - 'a';
size = expsize + ndig;
size += 2; /* 0x */
if (ndig > 1)
@@ -1037,7 +1039,8 @@ long_len:
/* prefix */
if (sign) {
PRINT(&sign, 1);
- } else if (flags & HEXPREFIX) {
+ }
+ if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
@@ -1051,7 +1054,7 @@ long_len:
PAD_L(dprec - fieldsz, zeroes);
if (sign)
fieldsz--;
- else if (flags & HEXPREFIX)
+ if (flags & HEXPREFIX)
fieldsz -= 2;
/* the string or number proper */
@@ -1059,10 +1062,7 @@ long_len:
if ((flags & FPT) == 0) {
PRINT(cp, fieldsz);
} else { /* glue together f_p fragments */
- if (ch == 'a' || ch == 'A') {
- ox[0] = '0';
- ox[1] = ch + ('x' - 'a');
- PRINT(ox, 2);
+ if (flags & HEXPREFIX) {
if (ndig > 1 || flags & ALT) {
ox[2] = *cp++;
ox[3] = '.';