Fix Werrors with GCC-14.1.0
[platform/upstream/rpm.git] / python / rpmps-py.c
1 #include "rpmsystem-py.h"
2
3 #include "rpmps-py.h"
4
5 struct rpmProblemObject_s {
6     PyObject_HEAD
7     PyObject *md_dict;
8     rpmProblem  prob;
9 };
10
11 static char rpmprob_doc[] =
12 "";
13
14 static PyObject *rpmprob_get_type(rpmProblemObject *s, void *closure)
15 {
16     return Py_BuildValue("i", rpmProblemGetType(s->prob));
17 }
18
19 static PyObject *rpmprob_get_pkgnevr(rpmProblemObject *s, void *closure)
20 {
21     return Py_BuildValue("s", rpmProblemGetPkgNEVR(s->prob));
22 }
23
24 static PyObject *rpmprob_get_altnevr(rpmProblemObject *s, void *closure)
25 {
26     return Py_BuildValue("s", rpmProblemGetAltNEVR(s->prob));
27 }
28
29 static PyObject *rpmprob_get_key(rpmProblemObject *s, void *closure)
30 {
31     fnpyKey key = rpmProblemGetKey(s->prob);
32     if (key) {
33         return Py_BuildValue("O", rpmProblemGetKey(s->prob));
34     } else {
35         Py_RETURN_NONE;
36     }
37 }
38
39 static PyObject *rpmprob_get_str(rpmProblemObject *s, void *closure)
40 {
41     return Py_BuildValue("s", rpmProblemGetStr(s->prob));
42 }
43
44 static PyObject *rpmprob_get_num(rpmProblemObject *s, void *closure)
45 {
46     return Py_BuildValue("L", rpmProblemGetDiskNeed(s->prob));
47 }
48
49 static PyGetSetDef rpmprob_getseters[] = {
50     { "type",           (getter)rpmprob_get_type, NULL, NULL },
51     { "pkgNEVR",        (getter)rpmprob_get_pkgnevr, NULL, NULL },
52     { "altNEVR",        (getter)rpmprob_get_altnevr, NULL, NULL },
53     { "key",            (getter)rpmprob_get_key, NULL, NULL },
54     { "_str",           (getter)rpmprob_get_str, NULL, NULL },
55     { "_num",           (getter)rpmprob_get_num, NULL, NULL },
56     { NULL }
57 };
58
59 static PyObject *rpmprob_str(rpmProblemObject *s)
60 {
61     char *str = rpmProblemString(s->prob);
62     PyObject *res = Py_BuildValue("s", str);
63     free(str);
64     return res;
65 }
66
67 static void rpmprob_dealloc(rpmProblemObject *s)
68 {
69     s->prob = rpmProblemFree(s->prob);
70     Py_TYPE(s)->tp_free((PyObject *)s);
71 }
72
73 PyTypeObject rpmProblem_Type = {
74         PyVarObject_HEAD_INIT(&PyType_Type, 0)
75         "rpm.prob",                     /* tp_name */
76         sizeof(rpmProblemObject),               /* tp_basicsize */
77         0,                              /* tp_itemsize */
78         /* methods */
79         (destructor)rpmprob_dealloc,    /* tp_dealloc */
80         0,                              /* tp_print */
81         (getattrfunc)0,                 /* tp_getattr */
82         (setattrfunc)0,                 /* tp_setattr */
83         0,                              /* tp_compare */
84         (reprfunc)0,                    /* tp_repr */
85         0,                              /* tp_as_number */
86         0,                              /* tp_as_sequence */
87         0,                              /* tp_as_mapping */
88         (hashfunc)0,                    /* tp_hash */
89         (ternaryfunc)0,                 /* tp_call */
90         (reprfunc)rpmprob_str,          /* tp_str */
91         PyObject_GenericGetAttr,        /* tp_getattro */
92         PyObject_GenericSetAttr,        /* tp_setattro */
93         0,                              /* tp_as_buffer */
94         Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
95         rpmprob_doc,                    /* tp_doc */
96         0,                              /* tp_traverse */
97         0,                              /* tp_clear */
98         (richcmpfunc)0,                 /* tp_richcompare */
99         0,                              /* tp_weaklistoffset */
100         0,                              /* tp_iter */
101         0,                              /* tp_iternext */
102         0,                              /* tp_methods */
103         0,                              /* tp_members */
104         rpmprob_getseters,              /* tp_getset */
105         0,                              /* tp_base */
106         0,                              /* tp_dict */
107         0,                              /* tp_descr_get */
108         0,                              /* tp_descr_set */
109         0,                              /* tp_dictoffset */
110         0,                              /* tp_init */
111         0,                              /* tp_alloc */
112         (newfunc)0,                     /* tp_new */
113         0,                              /* tp_free */
114         0,                              /* tp_is_gc */
115 };
116
117 PyObject *rpmprob_Wrap(PyTypeObject *subtype, rpmProblem prob)
118 {
119     rpmProblemObject * s = (rpmProblemObject *)subtype->tp_alloc(subtype, 0);
120     if (s == NULL) return NULL;
121
122     s->prob = rpmProblemLink(prob);
123     return (PyObject *) s;
124 }
125
126 PyObject *rpmps_AsList(rpmps ps)
127 {
128     PyObject *problems;
129     rpmpsi psi;
130     rpmProblem prob;
131
132     problems = PyList_New(0);
133     if (!problems) {
134         return NULL;
135     }
136
137     psi = rpmpsInitIterator(ps);
138
139     while ((prob = rpmpsiNext(psi))) {
140         PyObject *pyprob = rpmprob_Wrap(&rpmProblem_Type, prob);
141         if (!pyprob) {
142             Py_DECREF(problems);
143             rpmpsFreeIterator(psi);
144             return NULL;
145         }
146         PyList_Append(problems, pyprob);
147         Py_DECREF(pyprob);
148     }
149     rpmpsFreeIterator(psi);
150     return problems;
151 }