bpo-23867: Argument Clinic: inline parsing code for a single position… · python/cpython@32d96a2
@@ -19,7 +19,13 @@ _io__BufferedIOBase_readinto(PyObject *self, PyObject *arg)
1919PyObject *return_value = NULL;
2020Py_buffer buffer = {NULL, NULL};
212122-if (!PyArg_Parse(arg, "w*:readinto", &buffer)) {
22+if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) {
23+PyErr_Clear();
24+_PyArg_BadArgument("readinto", "read-write bytes-like object", arg);
25+ goto exit;
26+ }
27+if (!PyBuffer_IsContiguous(&buffer, 'C')) {
28+_PyArg_BadArgument("readinto", "contiguous buffer", arg);
2329 goto exit;
2430 }
2531return_value = _io__BufferedIOBase_readinto_impl(self, &buffer);
@@ -50,7 +56,13 @@ _io__BufferedIOBase_readinto1(PyObject *self, PyObject *arg)
5056PyObject *return_value = NULL;
5157Py_buffer buffer = {NULL, NULL};
525853-if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) {
59+if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) {
60+PyErr_Clear();
61+_PyArg_BadArgument("readinto1", "read-write bytes-like object", arg);
62+ goto exit;
63+ }
64+if (!PyBuffer_IsContiguous(&buffer, 'C')) {
65+_PyArg_BadArgument("readinto1", "contiguous buffer", arg);
5466 goto exit;
5567 }
5668return_value = _io__BufferedIOBase_readinto1_impl(self, &buffer);
@@ -183,7 +195,13 @@ _io__Buffered_readinto(buffered *self, PyObject *arg)
183195PyObject *return_value = NULL;
184196Py_buffer buffer = {NULL, NULL};
185197186-if (!PyArg_Parse(arg, "w*:readinto", &buffer)) {
198+if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) {
199+PyErr_Clear();
200+_PyArg_BadArgument("readinto", "read-write bytes-like object", arg);
201+ goto exit;
202+ }
203+if (!PyBuffer_IsContiguous(&buffer, 'C')) {
204+_PyArg_BadArgument("readinto", "contiguous buffer", arg);
187205 goto exit;
188206 }
189207return_value = _io__Buffered_readinto_impl(self, &buffer);
@@ -214,7 +232,13 @@ _io__Buffered_readinto1(buffered *self, PyObject *arg)
214232PyObject *return_value = NULL;
215233Py_buffer buffer = {NULL, NULL};
216234217-if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) {
235+if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) {
236+PyErr_Clear();
237+_PyArg_BadArgument("readinto1", "read-write bytes-like object", arg);
238+ goto exit;
239+ }
240+if (!PyBuffer_IsContiguous(&buffer, 'C')) {
241+_PyArg_BadArgument("readinto1", "contiguous buffer", arg);
218242 goto exit;
219243 }
220244return_value = _io__Buffered_readinto1_impl(self, &buffer);
@@ -390,7 +414,11 @@ _io_BufferedWriter_write(buffered *self, PyObject *arg)
390414PyObject *return_value = NULL;
391415Py_buffer buffer = {NULL, NULL};
392416393-if (!PyArg_Parse(arg, "y*:write", &buffer)) {
417+if (PyObject_GetBuffer(arg, &buffer, PyBUF_SIMPLE) != 0) {
418+ goto exit;
419+ }
420+if (!PyBuffer_IsContiguous(&buffer, 'C')) {
421+_PyArg_BadArgument("write", "contiguous buffer", arg);
394422 goto exit;
395423 }
396424return_value = _io_BufferedWriter_write_impl(self, &buffer);
@@ -476,4 +504,4 @@ _io_BufferedRandom___init__(PyObject *self, PyObject *args, PyObject *kwargs)
476504exit:
477505return return_value;
478506}
479-/*[clinic end generated code: output=cb4bf8d50533953b input=a9049054013a1b77]*/
507+/*[clinic end generated code: output=40de95d461a20782 input=a9049054013a1b77]*/