### 4.73 `viscanf`, `vfiscanf`, `vsiscanf`—format argument list

Synopsis

         #include <stdio.h>
         #include <stdarg.h>
         int viscanf(const char *fmt, va_list list);
         int vfiscanf(FILE *fp, const char *fmt, va_list list);
         int vsiscanf(const char *str, const char *fmt, va_list list);

         int _viscanf_r(struct _reent *reent, const char *fmt,
             va_list list);
         int _vfiscanf_r(struct _reent *reent, FILE *fp, const char *fmt,
             va_list list);
         int _vsiscanf_r(struct _reent *reent, const char *str,
             const char *fmt, va_list list);

Description
`viscanf`, `vfiscanf`, and `vsiscanf` are (respectively) variants of `iscanf`, `fiscanf`, and `siscanf`. They differ only in allowing their caller to pass the variable argument list as a `va_list` object (initialized by `va_start`) rather than directly accepting a variable number of arguments.

Returns
The return values are consistent with the corresponding functions: `viscanf` returns the number of input fields successfully scanned, converted, and stored; the return value does not include scanned fields which were not stored.

If `viscanf` attempts to read at end-of-file, the return value is `EOF`.

If no fields were stored, the return value is `0`.

The routines `_viscanf_r`, `_vfiscanf_f`, and `_vsiscanf_r` are reentrant versions which take an additional first parameter which points to the reentrancy structure.

Portability
These are newlib extensions.

Supporting OS subroutines required: