summaryrefslogtreecommitdiff
path: root/msgpack/buff_converter.h
diff options
context:
space:
mode:
authorINADA Naoki <methane@users.noreply.github.com>2018-11-09 20:55:13 +0900
committerGitHub <noreply@github.com>2018-11-09 20:55:13 +0900
commit9e210bfc1a922031db67bf42e508b1b4550814c6 (patch)
tree1bbef6a155df89e6fef0a9b5efbae4928fa40772 /msgpack/buff_converter.h
parenta8b3e97fe588a2411a8e869b52be1946ed9f0f86 (diff)
downloadmsgpack-python-9e210bfc1a922031db67bf42e508b1b4550814c6.tar.gz
Add Packer.buffer() (#320)
Diffstat (limited to 'msgpack/buff_converter.h')
-rw-r--r--msgpack/buff_converter.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/msgpack/buff_converter.h b/msgpack/buff_converter.h
new file mode 100644
index 0000000..bc7227a
--- /dev/null
+++ b/msgpack/buff_converter.h
@@ -0,0 +1,28 @@
+#include "Python.h"
+
+/* cython does not support this preprocessor check => write it in raw C */
+#if PY_MAJOR_VERSION == 2
+static PyObject *
+buff_to_buff(char *buff, Py_ssize_t size)
+{
+ return PyBuffer_FromMemory(buff, size);
+}
+
+#elif (PY_MAJOR_VERSION == 3) && (PY_MINOR_VERSION >= 3)
+static PyObject *
+buff_to_buff(char *buff, Py_ssize_t size)
+{
+ return PyMemoryView_FromMemory(buff, size, PyBUF_READ);
+}
+#else
+static PyObject *
+buff_to_buff(char *buff, Py_ssize_t size)
+{
+ Py_buffer pybuf;
+ if (PyBuffer_FillInfo(&pybuf, NULL, buff, size, 1, PyBUF_FULL_RO) == -1) {
+ return NULL;
+ }
+
+ return PyMemoryView_FromBuffer(&pybuf);
+}
+#endif