fix a bug
This commit is contained in:
parent
1700610729
commit
65967f2e05
|
@ -58,8 +58,8 @@ int
|
||||||
pic_get_args(pic_state *pic, const char *format, ...)
|
pic_get_args(pic_state *pic, const char *format, ...)
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
int paramc, optc, min;
|
size_t paramc, optc, min;
|
||||||
int i , argc = pic->ci->argc - 1;
|
size_t i , argc = pic->ci->argc - 1;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
bool rest = false, opt = false;
|
bool rest = false, opt = false;
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ pic_get_args(pic_state *pic, const char *format, ...)
|
||||||
|
|
||||||
/* start dispatching */
|
/* start dispatching */
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
min = paramc + optc + rest < argc ? paramc + optc + rest : argc;
|
min = paramc + optc < argc ? paramc + optc : argc;
|
||||||
for(i = 1; i < min + 1; i++) {
|
for(i = 1; i < min + 1; i++) {
|
||||||
|
|
||||||
c = *format++;
|
c = *format++;
|
||||||
|
@ -382,22 +382,19 @@ pic_get_args(pic_state *pic, const char *format, ...)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case '*': {
|
default:
|
||||||
|
pic_errorf(pic, "pic_get_args: invalid argument specifier '%c' given", c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (rest) {
|
||||||
size_t *n;
|
size_t *n;
|
||||||
pic_value **argv;
|
pic_value **argv;
|
||||||
|
|
||||||
n = va_arg(ap, size_t *);
|
n = va_arg(ap, size_t *);
|
||||||
argv = va_arg(ap, pic_value **);
|
argv = va_arg(ap, pic_value **);
|
||||||
if ( paramc + optc < argc) {
|
*n = (size_t)(argc - (i - 1));
|
||||||
*n = (size_t)(argc - (paramc + optc));
|
|
||||||
*argv = &GET_OPERAND(pic, i);
|
*argv = &GET_OPERAND(pic, i);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
pic_errorf(pic, "pic_get_args: invalid argument specifier '%c' given", c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return argc;
|
return argc;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue