diff options
author | Justus Winter <[email protected]> | 2016-05-12 15:44:54 +0000 |
---|---|---|
committer | Justus Winter <[email protected]> | 2016-05-12 15:59:21 +0000 |
commit | f7094d8358e933f3ce074eade7a40b2a7d291180 (patch) | |
tree | 625d6172569d071629d7d6762463bc707ea4663a /lang/python/gpgme.i | |
parent | python: Add a test suite. (diff) | |
download | gpgme-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.i | 17 |
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, |