int sfscanf(Sfio_t *f, const char *form, ...) { va_list args; int rv; va_start(args, form); rv = (f && form) ? sfvscanf(f, form, args) : -1; va_end(args); return rv; }
extern int _stdscanf(const char* fmt, ...) { va_list args; int v; va_start(args, fmt); v = sfvscanf(sfstdin, fmt, args); va_end(args); return v; }
int sfvsscanf(const char *s, const char *form, va_list args) { Sfio_t f; if (!s || !form) return -1; /* make a fake stream */ SFCLEAR(&f, NULL); f.flags = SF_STRING | SF_READ; f.bits = SF_PRIVATE; f.mode = SF_READ; f.size = strlen((char *)s); f.data = f.next = f.endw = (uchar *)s; f.endb = f.endr = f.data + f.size; return sfvscanf(&f, form, args); }