Commit | Line | Data |
---|---|---|
920dae64 AT |
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 |