diff options
author | tjr <tjr@FreeBSD.org> | 2002-10-11 22:59:22 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2002-10-11 22:59:22 +0000 |
commit | 5bbd2d0ed6b041f154b1ddbd22369095feb74c35 (patch) | |
tree | 013317c45d8c3d2540e87177ba62abbcab83c3a1 /lib/libc/stdlib/strfmon.c | |
parent | 9d7b7c1465ab07f0f838a08be1b198ddfa1e9bcb (diff) | |
download | FreeBSD-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/libc/stdlib/strfmon.c')
-rw-r--r-- | lib/libc/stdlib/strfmon.c | 28 |
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 */ |