diff options
| author | Justus Winter <[email protected]> | 2016-06-02 15:14:53 +0000 | 
|---|---|---|
| committer | Justus Winter <[email protected]> | 2016-06-06 12:16:04 +0000 | 
| commit | 26c3accc95ab77ddbe60db822e2938ad5f480d41 (patch) | |
| tree | 238748aaac8674b7b7ab73beb1229653a6084903 /lang/python/helpers.c | |
| parent | python: Fix error handling. (diff) | |
| download | gpgme-26c3accc95ab77ddbe60db822e2938ad5f480d41.tar.gz gpgme-26c3accc95ab77ddbe60db822e2938ad5f480d41.zip | |
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 <[email protected]>
Diffstat (limited to 'lang/python/helpers.c')
| -rw-r--r-- | lang/python/helpers.c | 36 | 
1 files changed, 36 insertions, 0 deletions
| diff --git a/lang/python/helpers.c b/lang/python/helpers.c index 4b6ac31f..3ecbacc7 100644 --- a/lang/python/helpers.c +++ b/lang/python/helpers.c @@ -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, | 
