diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-02-02 13:24:16 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-02-02 13:24:16 (GMT) |
commit | c0f59ad1455a53b6a8a9f09620ae4283e4df9f26 (patch) | |
tree | 2777c138d7b040194dba9a44926a325755a601dd /Modules | |
parent | a0e454b69d4e00c75eb04ffe7268b65dc51ae54b (diff) | |
download | cpython-c0f59ad1455a53b6a8a9f09620ae4283e4df9f26.zip cpython-c0f59ad1455a53b6a8a9f09620ae4283e4df9f26.tar.gz cpython-c0f59ad1455a53b6a8a9f09620ae4283e4df9f26.tar.bz2 |
Rename struct.unpack() 2nd parameter to "buffer"
Issue #29300: Rename struct.unpack() second parameter from "inputstr" to
"buffer", and use the Py_buffer type.
Fix also unit tests on struct.unpack() which passed a Unicode string instead of
a bytes string as struct.unpack() second parameter. The purpose of
test_trailing_counter() is to test invalid format strings, not to test the
buffer parameter.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_struct.c | 8 | ||||
-rw-r--r-- | Modules/clinic/_struct.c.h | 20 |
2 files changed, 16 insertions, 12 deletions
diff --git a/Modules/_struct.c b/Modules/_struct.c index 3626bad..78cd0f3 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -2162,7 +2162,7 @@ pack_into(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) unpack format: object - inputstr: object + buffer: Py_buffer / Return a tuple containing values unpacked according to the format string. @@ -2173,8 +2173,8 @@ See help(struct) for more on format strings. [clinic start generated code]*/ static PyObject * -unpack_impl(PyObject *module, PyObject *format, PyObject *inputstr) -/*[clinic end generated code: output=06951d66eae6d63b input=4b81d54988890f5e]*/ +unpack_impl(PyObject *module, PyObject *format, Py_buffer *buffer) +/*[clinic end generated code: output=f75ada02aaa33b3b input=654078e6660c2df0]*/ { PyStructObject *s_object; PyObject *result; @@ -2182,7 +2182,7 @@ unpack_impl(PyObject *module, PyObject *format, PyObject *inputstr) s_object = cache_struct(format); if (s_object == NULL) return NULL; - result = Struct_unpack(s_object, inputstr); + result = Struct_unpack_impl(s_object, buffer); Py_DECREF(s_object); return result; } diff --git a/Modules/clinic/_struct.c.h b/Modules/clinic/_struct.c.h index f05ea53..f9c3a5c 100644 --- a/Modules/clinic/_struct.c.h +++ b/Modules/clinic/_struct.c.h @@ -156,7 +156,7 @@ PyDoc_STRVAR(calcsize__doc__, {"calcsize", (PyCFunction)calcsize, METH_O, calcsize__doc__}, PyDoc_STRVAR(unpack__doc__, -"unpack($module, format, inputstr, /)\n" +"unpack($module, format, buffer, /)\n" "--\n" "\n" "Return a tuple containing values unpacked according to the format string.\n" @@ -169,27 +169,31 @@ PyDoc_STRVAR(unpack__doc__, {"unpack", (PyCFunction)unpack, METH_FASTCALL, unpack__doc__}, static PyObject * -unpack_impl(PyObject *module, PyObject *format, PyObject *inputstr); +unpack_impl(PyObject *module, PyObject *format, Py_buffer *buffer); static PyObject * unpack(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; PyObject *format; - PyObject *inputstr; + Py_buffer buffer = {NULL, NULL}; - if (!_PyArg_UnpackStack(args, nargs, "unpack", - 2, 2, - &format, &inputstr)) { + if (!_PyArg_ParseStack(args, nargs, "Oy*:unpack", + &format, &buffer)) { goto exit; } if (!_PyArg_NoStackKeywords("unpack", kwnames)) { goto exit; } - return_value = unpack_impl(module, format, inputstr); + return_value = unpack_impl(module, format, &buffer); exit: + /* Cleanup for buffer */ + if (buffer.obj) { + PyBuffer_Release(&buffer); + } + return return_value; } @@ -273,4 +277,4 @@ iter_unpack(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnam exit: return return_value; } -/*[clinic end generated code: output=db8152ad222fa3d0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0714090a5d0ea8ce input=a9049054013a1b77]*/ |