diff options
author | das <das@FreeBSD.org> | 2005-04-16 22:36:51 +0000 |
---|---|---|
committer | das <das@FreeBSD.org> | 2005-04-16 22:36:51 +0000 |
commit | bdb6987b1d0507edeab059f66ed6c31db98f1a65 (patch) | |
tree | a5f6c9f1e67f01c6fca27366c5bdc6e2c17baf69 /lib | |
parent | 9c49c2a65a7716bcd9c75a74df1af7695cfad48f (diff) | |
download | FreeBSD-src-bdb6987b1d0507edeab059f66ed6c31db98f1a65.zip FreeBSD-src-bdb6987b1d0507edeab059f66ed6c31db98f1a65.tar.gz |
Be bug-for-bug compatible with the C standard with respect to
printf("%#.0o", 0). Cite an amusing passage from a defect report.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/stdio/vfprintf.c | 10 | ||||
-rw-r--r-- | lib/libc/stdio/vfwprintf.c | 10 |
2 files changed, 16 insertions, 4 deletions
diff --git a/lib/libc/stdio/vfprintf.c b/lib/libc/stdio/vfprintf.c index ff688e7..790f687 100644 --- a/lib/libc/stdio/vfprintf.c +++ b/lib/libc/stdio/vfprintf.c @@ -1093,16 +1093,22 @@ number: if ((dprec = prec) >= 0) * ``The result of converting a zero value with an * explicit precision of zero is no characters.'' * -- ANSI X3J11 + * + * ``The C Standard is clear enough as is. The call + * printf("%#.0o", 0) should print 0.'' + * -- Defect Report #151 */ cp = buf + BUF; if (flags & INTMAX_SIZE) { - if (ujval != 0 || prec != 0) + if (ujval != 0 || prec != 0 || + (flags & ALT && base == 8)) cp = __ujtoa(ujval, cp, base, flags & ALT, xdigs, flags & GROUPING, thousands_sep, grouping); } else { - if (ulval != 0 || prec != 0) + if (ulval != 0 || prec != 0 || + (flags & ALT && base == 8)) cp = __ultoa(ulval, cp, base, flags & ALT, xdigs, flags & GROUPING, thousands_sep, diff --git a/lib/libc/stdio/vfwprintf.c b/lib/libc/stdio/vfwprintf.c index d93e507..2a332e7 100644 --- a/lib/libc/stdio/vfwprintf.c +++ b/lib/libc/stdio/vfwprintf.c @@ -1092,16 +1092,22 @@ number: if ((dprec = prec) >= 0) * ``The result of converting a zero value with an * explicit precision of zero is no characters.'' * -- ANSI X3J11 + * + * ``The C Standard is clear enough as is. The call + * printf("%#.0o", 0) should print 0.'' + * -- Defect Report #151 */ cp = buf + BUF; if (flags & INTMAX_SIZE) { - if (ujval != 0 || prec != 0) + if (ujval != 0 || prec != 0 || + (flags & ALT && base == 8)) cp = __ujtoa(ujval, cp, base, flags & ALT, xdigs, flags & GROUPING, thousands_sep, grouping); } else { - if (ulval != 0 || prec != 0) + if (ulval != 0 || prec != 0 || + (flags & ALT && base == 8)) cp = __ultoa(ulval, cp, base, flags & ALT, xdigs, flags & GROUPING, thousands_sep, |