fix a bug

This commit is contained in:
Sunrin SHIMURA (keen) 2015-02-03 17:19:17 +00:00
parent 1700610729
commit 65967f2e05
1 changed files with 10 additions and 13 deletions

View File

@ -58,8 +58,8 @@ int
pic_get_args(pic_state *pic, const char *format, ...)
{
char c;
int paramc, optc, min;
int i , argc = pic->ci->argc - 1;
size_t paramc, optc, min;
size_t i , argc = pic->ci->argc - 1;
va_list ap;
bool rest = false, opt = false;
@ -103,7 +103,7 @@ pic_get_args(pic_state *pic, const char *format, ...)
/* start dispatching */
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++) {
c = *format++;
@ -382,22 +382,19 @@ pic_get_args(pic_state *pic, const char *format, ...)
}
break;
}
case '*': {
default:
pic_errorf(pic, "pic_get_args: invalid argument specifier '%c' given", c);
}
}
if (rest) {
size_t *n;
pic_value **argv;
n = va_arg(ap, size_t *);
argv = va_arg(ap, pic_value **);
if ( paramc + optc < argc) {
*n = (size_t)(argc - (paramc + optc));
*argv = &GET_OPERAND(pic, i);
}
break;
*n = (size_t)(argc - (i - 1));
*argv = &GET_OPERAND(pic, i);
}
default:
pic_errorf(pic, "pic_get_args: invalid argument specifier '%c' given", c);
}
}
va_end(ap);
return argc;
}