upgrade rpm version to 4.14.1
[platform/upstream/rpm.git] / python / rpmsmodule.c
1 #include "rpmsystem-py.h"
2
3 #include <rpm/rpmsign.h>
4
5 static char rpms__doc__[] =
6 "";
7
8 static int parseSignArgs(PyObject * args, PyObject *kwds,
9                         const char **path, struct rpmSignArgs *sargs)
10 {
11     char * kwlist[] = { "path", "keyid", "hashalgo", NULL };
12
13     memset(sargs, 0, sizeof(*sargs));
14     return PyArg_ParseTupleAndKeywords(args, kwds, "s|si", kwlist,
15                                     path, &sargs->keyid, &sargs->hashalgo);
16 }
17
18 static PyObject * addSign(PyObject * self, PyObject * args, PyObject *kwds)
19 {
20     const char *path = NULL;
21     struct rpmSignArgs sargs;
22
23     if (parseSignArgs(args, kwds, &path, &sargs))
24         return NULL;
25
26     return PyBool_FromLong(rpmPkgSign(path, &sargs) == 0);
27 }
28
29 static PyObject * delSign(PyObject * self, PyObject * args, PyObject *kwds)
30 {
31     const char *path = NULL;
32     struct rpmSignArgs sargs;
33
34     if (parseSignArgs(args, kwds, &path, &sargs))
35         return NULL;
36
37     return PyBool_FromLong(rpmPkgDelSign(path, &sargs) == 0);
38 }
39
40 /*
41   Do any common preliminary work before python 2 vs python 3 module creation:
42 */
43 static int prepareInitModule(void)
44 {
45     return 1;
46 }
47
48 static int initModule(PyObject *m)
49 {
50     return 1;
51 }
52
53 static PyMethodDef modMethods[] = {
54     { "addSign", (PyCFunction) addSign, METH_VARARGS|METH_KEYWORDS, NULL },
55     { "delSign", (PyCFunction) delSign, METH_VARARGS|METH_KEYWORDS, NULL },
56     { NULL },
57 };
58
59 #if PY_MAJOR_VERSION >= 3
60 static struct PyModuleDef moduledef = {
61     PyModuleDef_HEAD_INIT,
62     "_rpms",     /* m_name */
63     rpms__doc__, /* m_doc */
64     0,           /* m_size */
65     modMethods,  /* m_methods */
66     NULL,        /* m_reload */
67     NULL,        /* m_traverse */
68     NULL,        /* m_clear */
69     NULL         /* m_free */
70 };
71
72 PyObject * PyInit__rpms(void);  /* XXX eliminate gcc warning */
73 PyObject * PyInit__rpms(void)
74 {
75     PyObject *m;
76
77     if (!prepareInitModule())
78         return NULL;
79     m = PyModule_Create(&moduledef);
80     if (m == NULL || !initModule(m)) {
81         Py_XDECREF(m);
82         m = NULL;
83     }
84     return m;
85 }
86 #else
87 void init_rpms(void);   /* XXX eliminate gcc warning */
88 void init_rpms(void)
89 {
90     PyObject *m;
91   
92     if (!prepareInitModule())
93         return;
94
95     m = Py_InitModule3("_rpms", modMethods, rpms__doc__);
96     if (m) initModule(m);
97 }
98 #endif