You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.6 KiB
92 lines
2.6 KiB
/* ------------------------------------------------------------ |
|
* --- Argc & Argv --- |
|
* ------------------------------------------------------------ */ |
|
|
|
%fragment("SWIG_AsArgcArgv","header",fragment="SWIG_AsCharPtrAndSize") { |
|
SWIGINTERN int |
|
SWIG_AsArgcArgv(PyObject *input, |
|
swig_type_info *ppchar_info, |
|
size_t *argc, char ***argv, int *owner) |
|
{ |
|
void *vptr; |
|
int res = SWIG_ConvertPtr(input, &vptr, ppchar_info, 0); |
|
if (!SWIG_IsOK(res)) { |
|
int list = 0; |
|
PyErr_Clear(); |
|
list = PyList_Check(input); |
|
if (list || PyTuple_Check(input)) { |
|
size_t i = 0; |
|
size_t size = list ? PyList_Size(input) : PyTuple_Size(input); |
|
if (argc) *argc = size; |
|
if (argv) { |
|
*argv = %new_array(size + 1, char*); |
|
for (; i < size; ++i) { |
|
PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i); |
|
char *cptr = 0; size_t sz = 0; int alloc = 0; |
|
res = SWIG_AsCharPtrAndSize(obj, &cptr, &sz, &alloc); |
|
if (SWIG_IsOK(res)) { |
|
if (cptr && sz) { |
|
(*argv)[i] = (alloc == SWIG_NEWOBJ) ? cptr : %new_copy_array(cptr, sz, char); |
|
} else { |
|
(*argv)[i] = 0; |
|
} |
|
} else { |
|
return SWIG_TypeError; |
|
} |
|
} |
|
(*argv)[i] = 0; |
|
if (owner) *owner = 1; |
|
} else { |
|
for (; i < size; ++i) { |
|
PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i); |
|
res = SWIG_AsCharPtrAndSize(obj, 0, 0, 0); |
|
if (!SWIG_IsOK(res)) return SWIG_TypeError; |
|
} |
|
if (owner) *owner = 0; |
|
} |
|
return SWIG_OK; |
|
} else { |
|
return SWIG_TypeError; |
|
} |
|
} else { |
|
/* seems dangerous, but the user asked for it... */ |
|
size_t i = 0; |
|
if (argv) { while (*argv[i] != 0) ++i;} |
|
if (argc) *argc = i; |
|
if (owner) *owner = 0; |
|
return SWIG_OK; |
|
} |
|
} |
|
} |
|
|
|
/* |
|
This typemap works with either a char**, a python list or a python |
|
tuple |
|
*/ |
|
|
|
%typemap(in,noblock=0,fragment="SWIG_AsArgcArgv") (int ARGC, char **ARGV) (int res,char **argv = 0, size_t argc = 0, int owner= 0) { |
|
res = SWIG_AsArgcArgv($input, $descriptor(char**), &argc, &argv, &owner); |
|
if (!SWIG_IsOK(res)) { |
|
$1 = 0; $2 = 0; |
|
%argument_fail(SWIG_TypeError, "int ARGC, char **ARGV", $symname, $argnum); |
|
} else { |
|
$1 = %static_cast(argc,$1_ltype); |
|
$2 = %static_cast(argv, $2_ltype); |
|
} |
|
} |
|
|
|
%typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) { |
|
int res = SWIG_AsArgcArgv($input, $descriptor(char**), 0, 0, 0); |
|
$1 = SWIG_IsOK(res); |
|
} |
|
|
|
%typemap(freearg,noblock=1) (int ARGC, char **ARGV) { |
|
if (owner$argnum) { |
|
size_t i = argc$argnum; |
|
while (i) { |
|
%delete_array(argv$argnum[--i]); |
|
} |
|
%delete_array(argv$argnum); |
|
} |
|
} |
|
|
|
|