summaryrefslogtreecommitdiff
path: root/share/swig/2.0.11/python/argcargv.i
diff options
context:
space:
mode:
Diffstat (limited to 'share/swig/2.0.11/python/argcargv.i')
-rw-r--r--share/swig/2.0.11/python/argcargv.i92
1 files changed, 92 insertions, 0 deletions
diff --git a/share/swig/2.0.11/python/argcargv.i b/share/swig/2.0.11/python/argcargv.i
new file mode 100644
index 0000000..717fe73
--- /dev/null
+++ b/share/swig/2.0.11/python/argcargv.i
@@ -0,0 +1,92 @@
+/* ------------------------------------------------------------
+ * --- 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);
+ }
+}
+