45#include <sys/limits.h>
46#include <sys/stddef.h>
52#include <machine/stdarg.h>
66#define PTRDIFFT 0x1000
68#define SHORTSHORT 0x4000
91typedef u_quad_t (*
ccfntype)(
const char *,
char **, int);
93static const u_char *
__sccl(
char *,
const u_char *);
96sscanf(
const char *ibuf,
const char *fmt, ...)
108vsscanf(
const char *inp,
char const *fmt0, va_list ap)
111 const u_char *fmt = (
const u_char *)fmt0;
127 static short basefix[17] =
128 { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
142 while (inr > 0 && isspace(*inp))
143 nread++, inr--, inp++;
198 case '0':
case '1':
case '2':
case '3':
case '4':
199 case '5':
case '6':
case '7':
case '8':
case '9':
200 width = width * 10 + c -
'0';
243 fmt =
__sccl(ccltab, fmt);
265 *va_arg(ap,
char *) = nread;
267 *va_arg(ap,
short *) = nread;
269 *va_arg(ap,
long *) = nread;
271 *va_arg(ap, quad_t *) = nread;
273 *va_arg(ap, intmax_t *) = nread;
275 *va_arg(ap,
size_t *) = nread;
277 *va_arg(ap, ptrdiff_t *) = nread;
279 *va_arg(ap,
int *) = nread;
294 while (isspace(*inp)) {
319 if ((n = inr) < width) {
335 bcopy(inp, va_arg(ap,
char *), width);
351 while (ccltab[(
unsigned char)*inp]) {
364 p0 = p = va_arg(ap,
char *);
365 while (ccltab[(
unsigned char)*inp]) {
392 while (!isspace(*inp)) {
401 p0 = p = va_arg(ap,
char *);
402 while (!isspace(*inp)) {
420 if (width == 0 || width >
sizeof(
buf) - 1)
421 width =
sizeof(
buf) - 1;
424 if (--width >
sizeof(
buf) - 2)
425 width =
sizeof(
buf) - 2;
429 for (p =
buf; width; width--) {
460 case '1':
case '2':
case '3':
461 case '4':
case '5':
case '6':
case '7':
462 base = basefix[base];
468 base = basefix[base];
475 case 'A':
case 'B':
case 'C':
476 case 'D':
case 'E':
case 'F':
477 case 'a':
case 'b':
case 'c':
478 case 'd':
case 'e':
case 'f':
531 c = ((u_char *)p)[-1];
532 if (c ==
'x' || c ==
'X') {
541 res = (*ccfn)(
buf, (
char **)NULL, base);
543 *va_arg(ap,
void **) =
544 (
void *)(uintptr_t)
res;
546 *va_arg(ap,
char *) =
res;
548 *va_arg(ap,
short *) =
res;
550 *va_arg(ap,
long *) =
res;
552 *va_arg(ap, quad_t *) =
res;
554 *va_arg(ap, intmax_t *) =
res;
556 *va_arg(ap, ptrdiff_t *) =
res;
558 *va_arg(ap,
size_t *) =
res;
560 *va_arg(ap,
int *) =
res;
569 return (nconversions != 0 ? nassigned : -1);
594 for (n = 0; n < 256; n++)
636 if (n ==
']' || n < c) {
int sscanf(const char *ibuf, const char *fmt,...)
int vsscanf(const char *inp, char const *fmt0, va_list ap)
static const u_char * __sccl(char *, const u_char *)
u_quad_t(* ccfntype)(const char *, char **, int)