python: Move helper function.

* lang/python/gpgme.i (object_to_gpgme_t): Move...
* lang/python/helpers.c: ... here.
* lang/python/helpers.h (object_to_gpgme_t): New prototype.

Signed-off-by: Justus Winter <justus@g10code.com>
This commit is contained in:
Justus Winter 2016-06-02 17:14:53 +02:00
parent 89eb0cd4d6
commit 26c3accc95
3 changed files with 38 additions and 31 deletions

View File

@ -79,37 +79,6 @@
%typemap(newfree) char * "free($1);";
%newobject gpgme_data_release_and_get_mem;
%{
/* Convert object to a pointer to gpgme type */
PyObject* object_to_gpgme_t(PyObject* input, const char* objtype, int argnum) {
PyObject *pyname = NULL, *pypointer = NULL;
pyname = PyObject_CallMethod(input, "_getctype", NULL);
if (pyname && PyUnicode_Check(pyname))
{
if (strcmp(PyUnicode_AsUTF8(pyname), objtype) != 0)
{
PyErr_Format(PyExc_TypeError,
"arg %d: Expected value of type %s, but got %s",
argnum, objtype, PyUnicode_AsUTF8(pyname));
Py_DECREF(pyname);
return NULL;
}
}
else
return NULL;
Py_DECREF(pyname);
pypointer = PyObject_GetAttrString(input, "wrapped");
if (pypointer == NULL) {
PyErr_Format(PyExc_TypeError,
"arg %d: Use of uninitialized Python object %s",
argnum, objtype);
return NULL;
}
return pypointer;
}
%}
%typemap(arginit) gpgme_key_t [] {
$1 = NULL;
}

View File

@ -146,7 +146,43 @@ PyObject *pygpgme_raise_callback_exception(PyObject *self)
return Py_None;
}
#undef EXCINFO
/* Argument conversion. */
/* Convert object to a pointer to gpgme type, generic version. */
PyObject *
object_to_gpgme_t(PyObject *input, const char *objtype, int argnum)
{
PyObject *pyname = NULL, *pypointer = NULL;
pyname = PyObject_CallMethod(input, "_getctype", NULL);
if (pyname && PyUnicode_Check(pyname))
{
if (strcmp(PyUnicode_AsUTF8(pyname), objtype) != 0)
{
PyErr_Format(PyExc_TypeError,
"arg %d: Expected value of type %s, but got %s",
argnum, objtype, PyUnicode_AsUTF8(pyname));
Py_DECREF(pyname);
return NULL;
}
}
else
return NULL;
Py_DECREF(pyname);
pypointer = PyObject_GetAttrString(input, "wrapped");
if (pypointer == NULL) {
PyErr_Format(PyExc_TypeError,
"arg %d: Use of uninitialized Python object %s",
argnum, objtype);
return NULL;
}
return pypointer;
}
/* Callback support. */
static gpgme_error_t pyPassphraseCb(void *hook,
const char *uid_hint,
const char *passphrase_info,

View File

@ -28,6 +28,8 @@
void pygpgme_exception_init(void);
gpgme_error_t pygpgme_exception2code(void);
PyObject *object_to_gpgme_t(PyObject *input, const char *objtype, int argnum);
void pygpgme_clear_generic_cb(PyObject **cb);
PyObject *pygpgme_raise_callback_exception(PyObject *self);