1 /* ------------------------------------------------------------
3 * ------------------------------------------------------------ */
5 %fragment("SWIG_AsArgcArgv","header",fragment="SWIG_AsCharPtrAndSize") {
7 SWIG_AsArgcArgv(PyObject *input,
8 swig_type_info *ppchar_info,
9 size_t *argc, char ***argv, int *owner)
12 int res = SWIG_ConvertPtr(input, &vptr, ppchar_info, 0);
13 if (!SWIG_IsOK(res)) {
16 list = PyList_Check(input);
17 if (list || PyTuple_Check(input)) {
19 size_t size = list ? PyList_Size(input) : PyTuple_Size(input);
20 if (argc) *argc = size;
22 *argv = %new_array(size + 1, char*);
23 for (; i < size; ++i) {
24 PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i);
25 char *cptr = 0; size_t sz = 0; int alloc = 0;
26 res = SWIG_AsCharPtrAndSize(obj, &cptr, &sz, &alloc);
29 (*argv)[i] = (alloc == SWIG_NEWOBJ) ? cptr : %new_copy_array(cptr, sz, char);
34 return SWIG_TypeError;
38 if (owner) *owner = 1;
40 for (; i < size; ++i) {
41 PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i);
42 res = SWIG_AsCharPtrAndSize(obj, 0, 0, 0);
43 if (!SWIG_IsOK(res)) return SWIG_TypeError;
45 if (owner) *owner = 0;
49 return SWIG_TypeError;
52 /* seems dangerous, but the user asked for it... */
54 if (argv) { while (*argv[i] != 0) ++i;}
56 if (owner) *owner = 0;
63 This typemap works with either a char**, a python list or a python
67 %typemap(in,noblock=0,fragment="SWIG_AsArgcArgv") (int ARGC, char **ARGV) (int res,char **argv = 0, size_t argc = 0, int owner= 0) {
68 res = SWIG_AsArgcArgv($input, $descriptor(char**), &argc, &argv, &owner);
69 if (!SWIG_IsOK(res)) {
71 %argument_fail(SWIG_TypeError, "int ARGC, char **ARGV", $symname, $argnum);
73 $1 = %static_cast(argc,$1_ltype);
74 $2 = %static_cast(argv, $2_ltype);
78 %typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **ARGV) {
79 int res = SWIG_AsArgcArgv($input, $descriptor(char**), 0, 0, 0);
83 %typemap(freearg,noblock=1) (int ARGC, char **ARGV) {
85 size_t i = argc$argnum;
87 %delete_array(argv$argnum[--i]);
89 %delete_array(argv$argnum);