diff --git a/Lib/octave/argcargv.i b/Lib/octave/argcargv.i index 3da37a9a5..8d455e586 100644 --- a/Lib/octave/argcargv.i +++ b/Lib/octave/argcargv.i @@ -4,15 +4,15 @@ %typemap(in) (int ARGC, char **ARGV) { if ($input.is_scalar_type()) { - $1 = 0; $2 = NULL; - %argument_fail(SWIG_TypeError, "'int ARGC, char **ARGV' is not a list", $symname, $argnum); + $1 = 0; $2 = NULL; + %argument_fail(SWIG_TypeError, "'int ARGC, char **ARGV' is not a list", $symname, $argnum); } octave_value_list list = $input.list_value(); int i, len = list.length(); $1 = ($1_ltype) len; $2 = (char **) malloc((len+1)*sizeof(char *)); for (i = 0; i < len; i++) { - if(!list(i).is_string()) { + if (!list(i).is_string()) { $1 = 0; %argument_fail(SWIG_TypeError, "'int ARGC, char **ARGV' use a non-string", $symname, $argnum); } @@ -22,8 +22,19 @@ } %typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) { + $1 = 0; const octave_value& ov = $input; - $1 = !ov.is_scalar_type(); + if (!ov.is_scalar_type()) { + octave_value_list list = ov.list_value(); + int i, len = list.length(); + $1 = 1; + for (i = 0; i < len; i++) { + if (!list(i).is_string()) { + $1 = 0; + break; + } + } + } } %typemap(freearg) (int ARGC, char **ARGV) {