summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authortjr <tjr@FreeBSD.org>2002-10-11 22:59:22 +0000
committertjr <tjr@FreeBSD.org>2002-10-11 22:59:22 +0000
commit5bbd2d0ed6b041f154b1ddbd22369095feb74c35 (patch)
tree013317c45d8c3d2540e87177ba62abbcab83c3a1 /lib
parent9d7b7c1465ab07f0f838a08be1b198ddfa1e9bcb (diff)
downloadFreeBSD-src-5bbd2d0ed6b041f154b1ddbd22369095feb74c35.zip
FreeBSD-src-5bbd2d0ed6b041f154b1ddbd22369095feb74c35.tar.gz
"Left precision" and "right precision" are not flags, but separate parts
of the format string that appear after the field width.
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/stdlib/strfmon.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/lib/libc/stdlib/strfmon.c b/lib/libc/stdlib/strfmon.c
index d30f268..b74baf0 100644
--- a/lib/libc/stdlib/strfmon.c
+++ b/lib/libc/stdlib/strfmon.c
@@ -174,18 +174,6 @@ strfmon(char * __restrict s, size_t maxsize, const char * __restrict format,
case '-': /* alignment (left) */
flags |= LEFT_JUSTIFY;
continue;
- case '#': /* left || right precision */
- case '.':
- if (*fmt == '#')
- ntmp = &left_prec;
- else
- ntmp = &right_prec;
-
- if (!isdigit((unsigned char)*++fmt))
- goto format_error;
- GET_NUMBER(*ntmp);
- fmt--;
- continue;
default:
break;
}
@@ -201,7 +189,21 @@ strfmon(char * __restrict s, size_t maxsize, const char * __restrict format,
if (dst + width >= s + maxsize)
goto e2big_error;
}
-
+
+ /* Left precision */
+ if (*fmt == '#') {
+ if (!isdigit((unsigned char)*++fmt))
+ goto format_error;
+ GET_NUMBER(left_prec);
+ }
+
+ /* Right precision */
+ if (*fmt == '.') {
+ if (!isdigit((unsigned char)*++fmt))
+ goto format_error;
+ GET_NUMBER(right_prec);
+ }
+
/* Conversion Characters */
switch (*fmt++) {
case 'i': /* use internaltion currency format */
OpenPOWER on IntegriCloud