while (strchr(spec + 1, *++fmt));
while (*++fmt && strchr(spec + 1, *fmt));
size(FS *fs){	FU *fu;	int bcnt, cursize;	char *fmt;	int prec;	/* figure out the data block size needed for each format unit */	for (cursize = 0, fu = fs->nextfu; fu; fu = fu->nextfu) {		if (fu->bcnt) {			cursize += fu->bcnt * fu->reps;			continue;		}		for (bcnt = prec = 0, fmt = fu->fmt; *fmt; ++fmt) {			if (*fmt != '%')				continue;			/*			 * skip any special chars -- save precision in			 * case it's a %s format.			 */			while (strchr(spec + 1, *++fmt));			if (*fmt == '.' && isdigit((unsigned char)*++fmt)) {				prec = atoi(fmt);				while (isdigit((unsigned char)*++fmt));			}			switch(*fmt) {			case 'c':				bcnt += 1;				break;			case 'd': case 'i': case 'o': case 'u':			case 'x': case 'X':				bcnt += 4;				break;			case 'e': case 'E': case 'f': case 'g': case 'G':				bcnt += 8;				break;			case 's':				bcnt += prec;				break;			case '_':				switch(*++fmt) {				case 'c': case 'p': case 'u':					bcnt += 1;					break;				}			}		}		cursize += bcnt * fu->reps;	}	return (cursize);}