aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/gpgme.i
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2016-05-12 15:44:54 +0000
committerJustus Winter <[email protected]>2016-05-12 15:59:21 +0000
commitf7094d8358e933f3ce074eade7a40b2a7d291180 (patch)
tree625d6172569d071629d7d6762463bc707ea4663a /lang/python/gpgme.i
parentpython: Add a test suite. (diff)
downloadgpgme-f7094d8358e933f3ce074eade7a40b2a7d291180.tar.gz
gpgme-f7094d8358e933f3ce074eade7a40b2a7d291180.zip
python: Fix writing to data buffers.
* lang/python/gpgme.i: Add typemap for buffers. * lang/python/pyme/core.py (Data.write): Fix function. * lang/python/tests/Makefile.am: Add new test. * lang/python/tests/t-data.py: New file. Signed-off-by: Justus Winter <[email protected]>
Diffstat (limited to 'lang/python/gpgme.i')
-rw-r--r--lang/python/gpgme.i17
1 files changed, 17 insertions, 0 deletions
diff --git a/lang/python/gpgme.i b/lang/python/gpgme.i
index 7c11943c..c5b5bc97 100644
--- a/lang/python/gpgme.i
+++ b/lang/python/gpgme.i
@@ -173,6 +173,23 @@ PyObject* object_to_gpgme_t(PyObject* input, const char* objtype, int argnum) {
free($1);
}
+/* For gpgme_data_write, but should be universal. */
+%typemap(in) (const void *buffer, size_t size) {
+ if ($input == Py_None)
+ $1 = NULL, $2 = 0;
+ else if (PyUnicode_Check($input))
+ $1 = PyUnicode_AsUTF8AndSize($input, (size_t *) &$2);
+ else if (PyBytes_Check($input))
+ PyBytes_AsStringAndSize($input, (char **) &$1, (size_t *) &$2);
+ else {
+ PyErr_Format(PyExc_TypeError,
+ "arg %d: expected str, bytes, or None, got %s",
+ $argnum, $input->ob_type->tp_name);
+ return NULL;
+ }
+}
+%typemap(freearg) (const void *buffer, size_t size) "";
+
// Make types containing 'next' field to be lists
%ignore next;
%typemap(out) gpgme_sig_notation_t, gpgme_engine_info_t, gpgme_subkey_t, gpgme_key_sig_t,