-/* $Id$ */
-
/* vfscanf( FILE *, const char *, va_list )
This file is part of the Public Domain C Library (PDCLib).
#include <ctype.h>
#ifndef REGTEST
+#include <_PDCLIB_io.h>
-int vfscanf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, va_list arg )
+int _PDCLIB_vfscanf_unlocked( FILE * _PDCLIB_restrict stream,
+ const char * _PDCLIB_restrict format,
+ va_list arg )
{
/* TODO: This function should interpret format as multibyte characters. */
struct _PDCLIB_status_t status;
}
if ( ! feof( stream ) )
{
- ungetc( c, stream );
+ _PDCLIB_ungetc_unlocked( c, stream );
}
}
else
{
/* Non-whitespace char in format string: Match verbatim */
- if ( ( ( c = getc( stream ) ) != *format ) || feof( stream ) )
+ if ( ( ( c = _PDCLIB_getc_unlocked( stream ) ) != *format ) || feof( stream ) )
{
/* Matching error */
if ( ! feof( stream ) && ! ferror( stream ) )
{
- ungetc( c, stream );
+ _PDCLIB_ungetc_unlocked( c, stream );
}
else if ( status.n == 0 )
{
return status.n;
}
+int vfscanf( FILE * _PDCLIB_restrict stream,
+ const char * _PDCLIB_restrict format,
+ va_list arg )
+{
+ _PDCLIB_flockfile( stream );
+ int r = _PDCLIB_vfscanf_unlocked( stream, format, arg );
+ _PDCLIB_funlockfile( stream );
+ return r;
+}
+
#endif
#ifdef TEST