| 1 | /* ------------------------------------------------------------ |
| 2 | * --- Argc & Argv --- |
| 3 | * ------------------------------------------------------------ */ |
| 4 | |
| 5 | %fragment("SWIG_AsArgcArgv","header", |
| 6 | fragment="SWIG_AsCharPtr") { |
| 7 | SWIGINTERN char** |
| 8 | SWIG_AsArgcArgv(PyObject* input, |
| 9 | swig_type_info* ppchar_info, |
| 10 | size_t* argc, int* owner) |
| 11 | { |
| 12 | char **argv = 0; |
| 13 | size_t i = 0; |
| 14 | if (SWIG_ConvertPtr(input, (void **)&argv, ppchar_info, 0) == -1) { |
| 15 | int list = 0; |
| 16 | PyErr_Clear(); |
| 17 | list = PyList_Check(input); |
| 18 | if (list || PyTuple_Check(input)) { |
| 19 | *argc = list ? PyList_Size(input) : PyTuple_Size(input); |
| 20 | argv = SWIG_new_array(*argc + 1, char*); |
| 21 | *owner = 1; |
| 22 | for (; i < *argc; ++i) { |
| 23 | PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i); |
| 24 | if (!SWIG_AsCharPtr(obj, &(argv[i]))) { |
| 25 | PyErr_Clear(); |
| 26 | PyErr_SetString(PyExc_TypeError,"list or tuple must contain strings only"); |
| 27 | } |
| 28 | } |
| 29 | argv[i] = 0; |
| 30 | return argv; |
| 31 | } else { |
| 32 | *argc = 0; |
| 33 | PyErr_SetString(PyExc_TypeError,"a list or tuple is expected"); |
| 34 | return 0; |
| 35 | } |
| 36 | } else { |
| 37 | /* seems dangerous, but the user asked for it... */ |
| 38 | while (argv[i] != 0) ++i; |
| 39 | *argc = i; |
| 40 | owner = 0; |
| 41 | return argv; |
| 42 | } |
| 43 | } |
| 44 | } |
| 45 | |
| 46 | /* |
| 47 | This typemap works with either a char**, a python list or a python |
| 48 | tuple |
| 49 | */ |
| 50 | |
| 51 | %typemap(in,fragment="SWIG_AsArgcArgv") (int ARGC, char **ARGV) |
| 52 | (int owner) { |
| 53 | size_t argc = 0; |
| 54 | char **argv = SWIG_AsArgcArgv($input, $descriptor(char**), &argc, &owner); |
| 55 | if (PyErr_Occurred()) { |
| 56 | $1 = 0; $2 = 0; |
| 57 | if (SWIG_arg_fail($argnum)) SWIG_fail; |
| 58 | } else { |
| 59 | $1 = ($1_ltype) argc; |
| 60 | $2 = ($2_ltype) argv; |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | %typemap(freearg) (int ARGC, char **ARGV) { |
| 65 | if (owner$argnum) SWIG_delete_array($2); |
| 66 | } |
| 67 | |