* @return Zero if the function succeeds, otherwise -1
*/
static int
-convert_args(char *command, PyObject *args)
+convert_args(char *command, PyObject *args, char ***rrdtool_argv, int *rrdtool_argc)
{
PyObject *o, *lo;
int i, j, args_count, argv_count, element_count;
}
}
- rrdtool_argv = PyMem_New(char *, element_count + 1);
+ *rrdtool_argv = PyMem_New(char *, element_count + 1);
- if (rrdtool_argv == NULL)
+ if (*rrdtool_argv == NULL)
return -1;
for (i = 0; i < args_count; i++) {
o = PyTuple_GET_ITEM(args, i);
if (PyRRD_String_Check(o))
- rrdtool_argv[++argv_count] = PyRRD_String_AS_STRING(o);
+ (*rrdtool_argv)[++argv_count] = PyRRD_String_AS_STRING(o);
else if (PyList_CheckExact(o)) {
for (j = 0; j < PyList_Size(o); j++) {
lo = PyList_GetItem(o, j);
if (PyRRD_String_Check(lo))
- rrdtool_argv[++argv_count] = PyRRD_String_AS_STRING(lo);
+ (*rrdtool_argv)[++argv_count] = PyRRD_String_AS_STRING(lo);
else {
- PyMem_Del(rrdtool_argv);
+ PyMem_Del(*rrdtool_argv);
PyErr_Format(PyExc_TypeError,
"Element %d in argument %d must be str", j, i);
return -1;
}
}
} else {
- PyMem_Del(rrdtool_argv);
+ PyMem_Del(*rrdtool_argv);
PyErr_Format(rrdtool_ProgrammingError,
"Argument %d must be str or list of str", i);
return -1;
}
}
- rrdtool_argv[0] = command;
- rrdtool_argc = element_count + 1;
+ (*rrdtool_argv)[0] = command;
+ *rrdtool_argc = element_count + 1;
return 0;
}
* Destroy argument vector.
*/
static void
-destroy_args(void)
+destroy_args(char ***rrdtool_argv)
{
- PyMem_Del(rrdtool_argv);
- rrdtool_argv = NULL;
+ PyMem_Del(*rrdtool_argv);
+ *rrdtool_argv = NULL;
}
/**
PyObject *ret;
int status;
- if (convert_args("create", args) == -1)
+ if (convert_args("create", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
ret = Py_None;
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
int status;
- if (convert_args("dump", args) == -1)
+ if (convert_args("dump", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
ret = Py_None;
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
int status;
- if (convert_args("update", args) == -1)
+ if (convert_args("update", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
ret = Py_None;
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
rrd_info_t *data;
- if (convert_args("updatev", args) == -1)
+ if (convert_args("updatev", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
rrd_info_free(data);
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
char **ds_namv;
int status;
- if (convert_args("fetch", args) == -1)
+ if (convert_args("fetch", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
rrd_freemem(ds_namv);
rrd_freemem(data);
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
int status;
- if (convert_args("flushcached", args) == -1)
+ if (convert_args("flushcached", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
ret = Py_None;
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
double ymin, ymax;
char **calcpr;
- if (convert_args("graph", args) == -1)
+ if (convert_args("graph", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
}
rrd_freemem(calcpr);
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
rrd_info_t *data;
- if (convert_args("graphv", args) == -1)
+ if (convert_args("graphv", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
rrd_info_free(data);
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
unsigned long step, col_cnt;
rrd_value_t *data, *datai;
- if (convert_args("xport", args) == -1)
+ if (convert_args("xport", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
rrd_freemem(data);
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret, *str;
char *data, *ptr, *end;
- if (convert_args("list", args) == -1)
+ if (convert_args("list", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
rrd_freemem(data);
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
int status;
- if (convert_args("tune", args) == -1)
+ if (convert_args("tune", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
ret = Py_None;
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
int ts;
- if (convert_args("first", args) == -1)
+ if (convert_args("first", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
} else
ret = PyRRD_Int_FromLong((long) ts);
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
int ts;
- if (convert_args("last", args) == -1)
+ if (convert_args("last", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
} else
ret = PyRRD_Int_FromLong((long) ts);
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
int status;
- if (convert_args("resize", args) == -1)
+ if (convert_args("resize", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
ret = Py_None;
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
PyObject *ret;
rrd_info_t *data;
- if (convert_args("info", args) == -1)
+ if (convert_args("info", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
Py_BEGIN_ALLOW_THREADS
rrd_info_free(data);
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}
char **ds_names, **last_ds;
unsigned long ds_cnt, i;
- if (convert_args("lastupdate", args) == -1)
+ if (convert_args("lastupdate", args, &rrdtool_argv, &rrdtool_argc) == -1)
return NULL;
else if (rrdtool_argc < 2) {
PyErr_SetString(rrdtool_ProgrammingError, "Missing filename argument");
}
- destroy_args();
+ destroy_args(&rrdtool_argv);
return ret;
}