/*
 * fscanf — форматированный ввод из потока; ядро — _scanf_core поверх
 * fgetc/ungetc (putback гарантирован полем hold).
 */

#include <stdarg.h>
#include "_file.h"
#include "../stdio/_scanf.h"

static int fs_get(void *ctx)
{
    return fgetc((FILE *)ctx);
}

static void fs_unget(void *ctx, int c)
{
    ungetc(c, (FILE *)ctx);
}

int fscanf(FILE *fp, const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    int r = _scanf_core(fs_get, fs_unget, fp, fmt, ap);
    va_end(ap);
    return r;
}
