cvs commit: src/lib/libc/stdio vfscanf.c
Peter Jeremy
peterjeremy at optushome.com.au
Wed Jul 2 12:46:09 PDT 2003
On Sat, Jun 28, 2003 at 02:04:19AM -0700, David Schultz wrote:
>On Sat, Jun 28, 2003, David Schultz wrote:
>> Revamp scanf's floating-point-parsing algorithm to support
>> [+|-]Inf, [+|-]NaN, nan(...), and hexidecimal FP constants.
...
>The new code should correctly parse any well-formed floating point
>number, but if you notice any problems, set (extern int) scanfdebug
>to 1. This will cause scanf() to dump core if it notices that
>strtod() disagrees with it about how long the number is.
vfscanf() does numeric conversion by calling strtoX() functions as
appropriate. One side-effect of this is that vfscanf() needs to
replicate the number parsing code in the strtoX() functions to
convert the incoming FILE* stream into a character array as needed
by strtoX() functions. This conversion also results in the 512
character limit on numeric strings.
It would seem cleaner to use a common underlying set of conversion
functions, similar to strtoX() but taking taking a FILE* and a width
instead of a char*. The strtoX() functions can hand-craft the FILE
structure much as sscanf() does.
Benefits:
- Removal of functionally duplicated code (vfscanf.c:parsefloat()
and CT_INT code in vfscanf())
- Removal of arbitrary(?) 512 char numeric conversion limit
Disadvantages:
- Additional effort to develop/maintain new code
- Some additional overhead in the strtoX() functions to build the FILE
structure.
Comments?
Peter
More information about the cvs-src
mailing list