source-engine/devtools/swigwin-1.3.34/Lib/python/argcargv.i

93 lines
2.6 KiB
OpenEdge ABL
Raw Normal View History

2020-04-22 16:56:21 +00:00
/* ------------------------------------------------------------
* --- 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);
}
}