fix msm-plugin.c svace issue: make sure dupPath is not NULL before strchr()
[platform/upstream/rpm.git] / python / rpmmacro-py.c
1 #include "rpmsystem-py.h"
2
3 #include <rpm/rpmmacro.h>
4
5 #include "header-py.h"  /* XXX for pyrpmError, doh */
6 #include "rpmmacro-py.h"
7
8 PyObject *
9 rpmmacro_AddMacro(PyObject * self, PyObject * args, PyObject * kwds)
10 {
11     const char * name, * val;
12     char * kwlist[] = {"name", "value", NULL};
13
14     if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss:AddMacro", kwlist,
15             &name, &val))
16         return NULL;
17
18     rpmPushMacro(NULL, name, NULL, val, -1);
19
20     Py_RETURN_NONE;
21 }
22
23 PyObject *
24 rpmmacro_DelMacro(PyObject * self, PyObject * args, PyObject * kwds)
25 {
26     const char * name;
27     char * kwlist[] = {"name", NULL};
28
29     if (!PyArg_ParseTupleAndKeywords(args, kwds, "s:DelMacro", kwlist, &name))
30         return NULL;
31
32     rpmPopMacro(NULL, name);
33
34     Py_RETURN_NONE;
35 }
36
37 PyObject * 
38 rpmmacro_ExpandMacro(PyObject * self, PyObject * args, PyObject * kwds)
39 {
40     const char *macro;
41     PyObject *res = NULL;
42     int num = 0;
43     char * kwlist[] = {"macro", "numeric", NULL};
44
45     if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", kwlist, &macro, &num))
46         return NULL;
47
48     if (num) {
49         res = Py_BuildValue("i", rpmExpandNumeric(macro));
50     } else {
51         char *str = NULL;
52         if (rpmExpandMacros(NULL, macro, &str, 0) < 0)
53             PyErr_SetString(pyrpmError, "error expanding macro");
54         else
55             res = Py_BuildValue("s", str);
56         free(str);
57     }
58     return res;
59 }
60