#include "stdio_impl.h" #include "libc.h" #include static size_t wstring_read(FILE *f, unsigned char *buf, size_t len) { const wchar_t *src = f->cookie; size_t k; if (!src) return 0; k = wcsrtombs((void *)f->buf, &src, f->buf_size, 0); if (k==(size_t)-1) { f->rpos = f->rend = 0; return 0; } f->rpos = f->buf; f->rend = f->buf + k; f->cookie = (void *)src; if (!len || !k) return 0; *buf = *f->rpos++; return 1; } int vswscanf(const wchar_t *restrict s, const wchar_t *restrict fmt, va_list ap) { unsigned char buf[256]; FILE f = { .buf = buf, .buf_size = sizeof buf, .cookie = (void *)s, .read = wstring_read, .lock = -1 }; return vfwscanf(&f, fmt, ap); } weak_alias(vswscanf,__isoc99_vswscanf);