printf_arg_t arg;
REGISTER int i;
int args_needed = get_args_needed(specs);
+ int spec_len = -1;
+
+ if (specs)
+ spec_len = Dynarr_length(specs);
xzero(arg);
for (i = 1; i <= args_needed; i++) {
char ch;
printf_spec_t spec = 0;
- for (j = 0; j < Dynarr_length(specs); j++) {
+ for (j = 0; j < spec_len; j++) {
spec = Dynarr_atp(specs, j);
if (spec->argnum == i) {
break;
}
}
- if (j == Dynarr_length(specs))
+ if (j >= spec_len)
error("No conversion spec for argument %d", i);
ch = spec->converter;
} else {
args = get_doprnt_args(specs, vargs);
}
-
- for (i = 0; i < Dynarr_length(specs); i++) {
+
+ for (i = 0; specs && i < Dynarr_length(specs); i++) {
printf_spec_t spec = Dynarr_atp(specs, i);
char ch;