OLD | NEW |
(Empty) | |
| 1 /* ------------------------------------------------------------ |
| 2 * --- Argc & Argv --- |
| 3 * ------------------------------------------------------------ */ |
| 4 |
| 5 %fragment("SWIG_AsArgcArgv","header",fragment="SWIG_AsCharPtrAndSize") { |
| 6 SWIGINTERN int |
| 7 SWIG_AsArgcArgv(PyObject *input, |
| 8 swig_type_info *ppchar_info, |
| 9 size_t *argc, char ***argv, int *owner) |
| 10 { |
| 11 void *vptr; |
| 12 int res = SWIG_ConvertPtr(input, &vptr, ppchar_info, 0); |
| 13 if (!SWIG_IsOK(res)) { |
| 14 int list = 0; |
| 15 PyErr_Clear(); |
| 16 list = PyList_Check(input); |
| 17 if (list || PyTuple_Check(input)) { |
| 18 size_t i = 0; |
| 19 size_t size = list ? PyList_Size(input) : PyTuple_Size(input); |
| 20 if (argc) *argc = size; |
| 21 if (argv) { |
| 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); |
| 27 if (SWIG_IsOK(res)) { |
| 28 if (cptr && sz) { |
| 29 (*argv)[i] = (alloc == SWIG_NEWOBJ) ? cptr : %new_copy_array(cptr,
sz, char); |
| 30 } else { |
| 31 (*argv)[i] = 0; |
| 32 } |
| 33 } else { |
| 34 return SWIG_TypeError; |
| 35 } |
| 36 } |
| 37 (*argv)[i] = 0; |
| 38 if (owner) *owner = 1; |
| 39 } else { |
| 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; |
| 44 } |
| 45 if (owner) *owner = 0; |
| 46 } |
| 47 return SWIG_OK; |
| 48 } else { |
| 49 return SWIG_TypeError; |
| 50 } |
| 51 } else { |
| 52 /* seems dangerous, but the user asked for it... */ |
| 53 size_t i = 0; |
| 54 if (argv) { while (*argv[i] != 0) ++i;} |
| 55 if (argc) *argc = i; |
| 56 if (owner) *owner = 0; |
| 57 return SWIG_OK; |
| 58 } |
| 59 } |
| 60 } |
| 61 |
| 62 /* |
| 63 This typemap works with either a char**, a python list or a python |
| 64 tuple |
| 65 */ |
| 66 |
| 67 %typemap(in,noblock=0,fragment="SWIG_AsArgcArgv") (int ARGC, char **ARGV) (int r
es,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)) { |
| 70 $1 = 0; $2 = 0; |
| 71 %argument_fail(SWIG_TypeError, "int ARGC, char **ARGV", $symname, $argnum); |
| 72 } else { |
| 73 $1 = %static_cast(argc,$1_ltype); |
| 74 $2 = %static_cast(argv, $2_ltype); |
| 75 } |
| 76 } |
| 77 |
| 78 %typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) (int ARGC, char **AR
GV) { |
| 79 int res = SWIG_AsArgcArgv($input, $descriptor(char**), 0, 0, 0); |
| 80 $1 = SWIG_IsOK(res); |
| 81 } |
| 82 |
| 83 %typemap(freearg,noblock=1) (int ARGC, char **ARGV) { |
| 84 if (owner$argnum) { |
| 85 size_t i = argc$argnum; |
| 86 while (i) { |
| 87 %delete_array(argv$argnum[--i]); |
| 88 } |
| 89 %delete_array(argv$argnum); |
| 90 } |
| 91 } |
| 92 |
OLD | NEW |