csomh / source-git / rpm

Forked from source-git/rpm 4 years ago
Clone
2ff057
#include "rpmsystem-py.h"
2ff057
2ff057
#include <rpm/rpmsign.h>
2ff057
2ff057
static char rpms__doc__[] =
2ff057
"";
2ff057
2ff057
static int parseSignArgs(PyObject * args, PyObject *kwds,
2ff057
			const char **path, struct rpmSignArgs *sargs)
2ff057
{
2ff057
    char * kwlist[] = { "path", "keyid", "hashalgo", NULL };
2ff057
2ff057
    memset(sargs, 0, sizeof(*sargs));
2ff057
    return PyArg_ParseTupleAndKeywords(args, kwds, "s|si", kwlist,
2ff057
				    path, &sargs->keyid, &sargs->hashalgo);
2ff057
}
2ff057
2ff057
static PyObject * addSign(PyObject * self, PyObject * args, PyObject *kwds)
2ff057
{
2ff057
    const char *path = NULL;
2ff057
    struct rpmSignArgs sargs;
2ff057
2ff057
    if (!parseSignArgs(args, kwds, &path, &sargs))
2ff057
	return NULL;
2ff057
2ff057
    return PyBool_FromLong(rpmPkgSign(path, &sargs) == 0);
2ff057
}
2ff057
2ff057
static PyObject * delSign(PyObject * self, PyObject * args, PyObject *kwds)
2ff057
{
2ff057
    const char *path = NULL;
2ff057
    struct rpmSignArgs sargs;
2ff057
2ff057
    if (!parseSignArgs(args, kwds, &path, &sargs))
2ff057
	return NULL;
2ff057
2ff057
    return PyBool_FromLong(rpmPkgDelSign(path, &sargs) == 0);
2ff057
}
2ff057
2ff057
/*
2ff057
  Do any common preliminary work before python 2 vs python 3 module creation:
2ff057
*/
2ff057
static int prepareInitModule(void)
2ff057
{
2ff057
    return 1;
2ff057
}
2ff057
2ff057
static int initModule(PyObject *m)
2ff057
{
2ff057
    return 1;
2ff057
}
2ff057
2ff057
static PyMethodDef modMethods[] = {
2ff057
    { "addSign", (PyCFunction) addSign, METH_VARARGS|METH_KEYWORDS, NULL },
2ff057
    { "delSign", (PyCFunction) delSign, METH_VARARGS|METH_KEYWORDS, NULL },
2ff057
    { NULL },
2ff057
};
2ff057
2ff057
#if PY_MAJOR_VERSION >= 3
2ff057
static struct PyModuleDef moduledef = {
2ff057
    PyModuleDef_HEAD_INIT,
2ff057
    "_rpms",     /* m_name */
2ff057
    rpms__doc__, /* m_doc */
2ff057
    0,           /* m_size */
2ff057
    modMethods,  /* m_methods */
2ff057
    NULL,        /* m_reload */
2ff057
    NULL,        /* m_traverse */
2ff057
    NULL,        /* m_clear */
2ff057
    NULL         /* m_free */
2ff057
};
2ff057
2ff057
PyObject * PyInit__rpms(void);	/* XXX eliminate gcc warning */
2ff057
PyObject * PyInit__rpms(void)
2ff057
{
2ff057
    PyObject *m;
2ff057
2ff057
    if (!prepareInitModule())
2ff057
        return NULL;
2ff057
    m = PyModule_Create(&moduledef);
2ff057
    if (m == NULL || !initModule(m)) {
2ff057
        Py_XDECREF(m);
2ff057
        m = NULL;
2ff057
    }
2ff057
    return m;
2ff057
}
2ff057
#else
2ff057
void init_rpms(void);	/* XXX eliminate gcc warning */
2ff057
void init_rpms(void)
2ff057
{
2ff057
    PyObject *m;
2ff057
  
2ff057
    if (!prepareInitModule())
2ff057
        return;
2ff057
2ff057
    m = Py_InitModule3("_rpms", modMethods, rpms__doc__);
2ff057
    if (m) initModule(m);
2ff057
}
2ff057
#endif