vsscanf.c raw

   1  #include "stdio_impl.h"
   2  #include <string.h>
   3  
   4  static size_t string_read(FILE *f, unsigned char *buf, size_t len)
   5  {
   6  	char *src = f->cookie;
   7  	size_t k = len+256;
   8  	char *end = memchr(src, 0, k);
   9  	if (end) k = end-src;
  10  	if (k < len) len = k;
  11  	memcpy(buf, src, len);
  12  	f->rpos = (void *)(src+len);
  13  	f->rend = (void *)(src+k);
  14  	f->cookie = src+k;
  15  	return len;
  16  }
  17  
  18  int vsscanf(const char *restrict s, const char *restrict fmt, va_list ap)
  19  {
  20  	FILE f = {
  21  		.buf = (void *)s, .cookie = (void *)s,
  22  		.read = string_read, .lock = -1
  23  	};
  24  	return vfscanf(&f, fmt, ap);
  25  }
  26  
  27  weak_alias(vsscanf,__isoc99_vsscanf);
  28