diff --git a/bytes.go b/bytes.go index 1ed45d2..e7a4a0d 100644 --- a/bytes.go +++ b/bytes.go @@ -35,6 +35,14 @@ func PyBytes_FromString(str string) *PyObject { return togo(C.PyBytes_FromString(cstr)) } +//PyBytes_FromStringAndSize : https://docs.python.org/3/c-api/bytes.html#c.PyBytes_FromStringAndSize +func PyBytes_FromStringAndSize(str string) *PyObject { + cstr := C.CString(str) + defer C.free(unsafe.Pointer(cstr)) + + return togo(C.PyBytes_FromStringAndSize(cstr, C.Py_ssize_t(len(str)))) +} + //PyBytes_FromObject : https://docs.python.org/3/c-api/bytes.html#c.PyBytes_FromObject func PyBytes_FromObject(o *PyObject) *PyObject { return togo(C.PyBytes_FromObject(toc(o))) diff --git a/bytes_test.go b/bytes_test.go index fc4ec93..042dce1 100644 --- a/bytes_test.go +++ b/bytes_test.go @@ -35,6 +35,17 @@ func TestBytesFromAsString(t *testing.T) { assert.Equal(t, s1, PyBytes_AsString(bytes1)) } +func TestBytesFromStringAndSize(t *testing.T) { + Py_Initialize() + + s1 := "aaaaaaaa\x00bbbb" + + bytes1 := PyBytes_FromStringAndSize(s1) + defer bytes1.DecRef() + + assert.Equal(t, s1, PyBytes_AsString(bytes1)) +} + func TestBytesSize(t *testing.T) { Py_Initialize()