version 1.13, 2003/06/12 20:58:09 |
version 1.14, 2004/11/21 19:57:16 |
|
|
* skip any special chars -- save precision in |
* skip any special chars -- save precision in |
* case it's a %s format. |
* case it's a %s format. |
*/ |
*/ |
while (strchr(spec + 1, *++fmt)); |
while (*++fmt && strchr(spec + 1, *fmt)); |
if (*fmt == '.' && isdigit((unsigned char)*++fmt)) { |
if (*fmt == '.' && isdigit((unsigned char)*++fmt)) { |
prec = atoi(fmt); |
prec = atoi(fmt); |
while (isdigit((unsigned char)*++fmt)); |
while (isdigit((unsigned char)*++fmt)); |
|
|
if (fu->bcnt) { |
if (fu->bcnt) { |
sokay = USEBCNT; |
sokay = USEBCNT; |
/* Skip to conversion character. */ |
/* Skip to conversion character. */ |
for (++p1; strchr(spec, *p1); ++p1); |
for (++p1; *p1 && strchr(spec, *p1); ++p1); |
} else { |
} else { |
/* Skip any special chars, field width. */ |
/* Skip any special chars, field width. */ |
while (strchr(spec + 1, *++p1)); |
while (*++p1 && strchr(spec + 1, *p1)); |
if (*p1 == '.' && |
if (*p1 == '.' && |
isdigit((unsigned char)*++p1)) { |
isdigit((unsigned char)*++p1)) { |
sokay = USEPREC; |
sokay = USEPREC; |
|
|
sokay = NOTOKAY; |
sokay = NOTOKAY; |
} |
} |
|
|
p2 = p1 + 1; /* Set end pointer. */ |
p2 = *p1 ? p1 + 1 : p1; /* Set end pointer. */ |
cs[0] = *p1; /* Set conversion string. */ |
cs[0] = *p1; /* Set conversion string. */ |
cs[1] = '\0'; |
cs[1] = '\0'; |
|
|
|
|
} |
} |
break; |
break; |
case 'd': case 'i': |
case 'd': case 'i': |
pr->flags = F_INT; |
|
goto isint; |
|
case 'o': case 'u': case 'x': case 'X': |
case 'o': case 'u': case 'x': case 'X': |
pr->flags = F_UINT; |
if (cs[0] == 'd' || cs[0] == 'i') |
isint: cs[2] = '\0'; |
pr->flags = F_INT; |
|
else |
|
pr->flags = F_UINT; |
|
|
|
cs[2] = '\0'; |
cs[1] = cs[0]; |
cs[1] = cs[0]; |
cs[0] = 'q'; |
cs[0] = 'q'; |
switch(fu->bcnt) { |
switch(fu->bcnt) { |
|
|
cs[2] = '\0'; |
cs[2] = '\0'; |
break; |
break; |
default: |
default: |
p1[3] = '\0'; |
if (p1[2]) |
|
p1[3] = '\0'; |
badconv(p1); |
badconv(p1); |
} |
} |
break; |
break; |
case 'c': |
case 'c': |
pr->flags = F_C; |
|
/* cs[0] = 'c'; set in conv_c */ |
|
goto isint2; |
|
case 'p': |
case 'p': |
pr->flags = F_P; |
|
cs[0] = 'c'; |
|
goto isint2; |
|
case 'u': |
case 'u': |
pr->flags = F_U; |
if (p1[1] == 'c') { |
/* cs[0] = 'c'; set in conv_u */ |
pr->flags = F_C; |
isint2: switch(fu->bcnt) { |
/* cs[0] = 'c'; set in conv_c */ |
|
} else if (p1[1] == 'p') { |
|
pr->flags = F_P; |
|
cs[0] = 'c'; |
|
} else { |
|
pr->flags = F_U; |
|
/* cs[0] = 'c'; set in conv_u */ |
|
} |
|
|
|
switch(fu->bcnt) { |
case 0: case 1: |
case 0: case 1: |
pr->bcnt = 1; |
pr->bcnt = 1; |
break; |
break; |
|
|
} |
} |
break; |
break; |
default: |
default: |
p1[2] = '\0'; |
if (p1[1]) |
|
p1[2] = '\0'; |
badconv(p1); |
badconv(p1); |
} |
} |
break; |
break; |
default: |
default: |
p1[1] = '\0'; |
if (cs[0]) |
|
p1[1] = '\0'; |
badconv(p1); |
badconv(p1); |
} |
} |
|
|
|
|
!(fu->flags&F_SETREP) && fu->bcnt) |
!(fu->flags&F_SETREP) && fu->bcnt) |
fu->reps += (blocksize - fs->bcnt) / fu->bcnt; |
fu->reps += (blocksize - fs->bcnt) / fu->bcnt; |
if (fu->reps > 1) { |
if (fu->reps > 1) { |
|
if (!fu->nextpr) |
|
break; |
for (pr = fu->nextpr;; pr = pr->nextpr) |
for (pr = fu->nextpr;; pr = pr->nextpr) |
if (!pr->nextpr) |
if (!pr->nextpr) |
break; |
break; |
|
|
*p2 = *p1; |
*p2 = *p1; |
break; |
break; |
} |
} |
if (*p1 == '\\') |
if (*p1 == '\\') { |
switch(*++p1) { |
switch(*++p1) { |
|
case '\0': |
|
*p2++ = '\\'; |
|
*p2 = '\0'; |
|
return; /* incomplete escape sequence */ |
case 'a': |
case 'a': |
/* *p2 = '\a'; */ |
/* *p2 = '\a'; */ |
*p2 = '\007'; |
*p2 = '\007'; |
|
|
*p2 = *p1; |
*p2 = *p1; |
break; |
break; |
} |
} |
|
} else |
|
*p2 = *p1; |
} |
} |
} |
} |
|
|