blob: 003be96a7ead6e4355640b2405d6ba9a7aeb3fad [file] [log] [blame]
/* -------------------------------------------------------------
* SWIG library containing argc and argv multi-argument typemaps
* ------------------------------------------------------------- */
%typemap(in) (int ARGC, char **ARGV) {
$1_ltype i, len;
SWIG_contract_assert($input != (SCM)0 &&
!scm_is_null($input) &&
scm_is_array($input),
"you must pass array of strings");
len = scm_c_array_length($input);
$1 = len;
$2 = ($2_ltype) malloc((len+1)*sizeof($*2_ltype));
if ($2 == NULL) {
scm_misc_error(FUNC_NAME, "fail allocating memory for array", SCM_EOL);
}
for (i = 0; i < len; i++) {
SCM args = scm_list_1(scm_from_long(i));
SCM str = scm_array_ref($input, args);
SWIG_contract_assert(scm_is_string(str), "elements in array must be strings");
$2[i] = ($*2_ltype)SWIG_scm2str(str);
}
$2[i] = NULL;
}
%typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) {
if ($input != (SCM)0 && !scm_is_null($input) && scm_is_array($input)) {
size_t len = scm_c_array_length($input);
size_t i;
for(i = 0; i < len; i++) {
SCM args = scm_list_1(scm_from_long(i));
SCM str = scm_array_ref($input, args);
if (!scm_is_string(str)) {
break;
}
}
/* All elements are strings! */
$1 = (i == len);
}
}
%typemap(freearg) (int ARGC, char **ARGV) {
free((void *)$2);
}