projects
/
fw
/
pdclib
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Copy & paste error having sscanf code in there. Fixed.
[fw/pdclib]
/
functions
/
stdio
/
vfscanf.c
diff --git
a/functions/stdio/vfscanf.c
b/functions/stdio/vfscanf.c
index 8b3a8f74c62426b7a0d029113738f79300c294e9..bf09226c16edb26b77e1b4355f064e236afbec40 100644
(file)
--- a/
functions/stdio/vfscanf.c
+++ b/
functions/stdio/vfscanf.c
@@
-24,35
+24,39
@@
int vfscanf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict forma
status.width = 0;
status.prec = 0;
status.stream = stream;
status.width = 0;
status.prec = 0;
status.stream = stream;
+ // = { 0, 0, 0, 0, 0, NULL, 0, 0, stream }
va_copy( status.arg, arg );
va_copy( status.arg, arg );
- // FIXME: This whole shebang should operate on STREAM, not S...
while ( *format != '\0' )
{
const char * rc;
if ( ( *format != '%' ) || ( ( rc = _PDCLIB_scan( format, &status ) ) == format ) )
{
while ( *format != '\0' )
{
const char * rc;
if ( ( *format != '%' ) || ( ( rc = _PDCLIB_scan( format, &status ) ) == format ) )
{
+ int c;
/* No conversion specifier, match verbatim */
if ( isspace( *format ) )
{
/* Whitespace char in format string: Skip all whitespaces */
/* No conversion specifier, match verbatim */
if ( isspace( *format ) )
{
/* Whitespace char in format string: Skip all whitespaces */
- /* No whitespaces in input do not result in matching error */
- while ( isspace(
*status.s
) )
+ /* No whitespaces in input do
es
not result in matching error */
+ while ( isspace(
c = getc( stream )
) )
{
{
- ++status.s;
++status.i;
}
++status.i;
}
+ if ( c != EOF )
+ {
+ ungetc( c, stream );
+ }
}
else
{
/* Non-whitespace char in format string: Match verbatim */
}
else
{
/* Non-whitespace char in format string: Match verbatim */
- if (
*status.s
!= *format )
+ if (
( c = getc( stream ) )
!= *format )
{
/* Matching error */
{
/* Matching error */
+ ungetc( c, stream );
return status.n;
}
else
{
return status.n;
}
else
{
- ++status.s;
++status.i;
}
}
++status.i;
}
}
@@
-80,6
+84,7
@@
int vfscanf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict forma
int main( void )
{
int main( void )
{
+ /* TODO: Check whitespace / EOF / ungetc handling */
TESTCASE( NO_TESTDRIVER );
return TEST_RESULTS;
}
TESTCASE( NO_TESTDRIVER );
return TEST_RESULTS;
}