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