11/* fcntl module */
22
3- // Need limited C API version 3.14 for PyLong_AsNativeBytes() in AC code
4- #include "pyconfig.h" // Py_GIL_DISABLED
5- #ifndef Py_GIL_DISABLED
6- # define Py_LIMITED_API 0x030e0000
3+ // Argument Clinic uses the internal C API
4+ #ifndef Py_BUILD_CORE_BUILTIN
5+ # define Py_BUILD_CORE_MODULE 1
76#endif
87
98#include "Python.h"
@@ -113,12 +112,12 @@ fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg)
113112 return PyBytes_FromStringAndSize (buf , len );
114113 }
115114 else {
116- PyObject * result = PyBytes_FromStringAndSize ( NULL , len );
117- if (result == NULL ) {
115+ PyBytesWriter * writer = PyBytesWriter_Create ( len );
116+ if (writer == NULL ) {
118117 PyBuffer_Release (& view );
119118 return NULL ;
120119 }
121- char * ptr = PyBytes_AsString ( result );
120+ char * ptr = PyBytesWriter_GetData ( writer );
122121 memcpy (ptr , view .buf , len );
123122 PyBuffer_Release (& view );
124123
@@ -131,15 +130,15 @@ fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg)
131130 if (!async_err ) {
132131 PyErr_SetFromErrno (PyExc_OSError );
133132 }
134- Py_DECREF ( result );
133+ PyBytesWriter_Discard ( writer );
135134 return NULL ;
136135 }
137136 if (ptr [len ] != '\0' ) {
138137 PyErr_SetString (PyExc_SystemError , "buffer overflow" );
139- Py_DECREF ( result );
138+ PyBytesWriter_Discard ( writer );
140139 return NULL ;
141140 }
142- return result ;
141+ return PyBytesWriter_Finish ( writer ) ;
143142 }
144143#undef FCNTL_BUFSZ
145144 }
@@ -297,12 +296,12 @@ fcntl_ioctl_impl(PyObject *module, int fd, unsigned long code, PyObject *arg,
297296 return PyBytes_FromStringAndSize (buf , len );
298297 }
299298 else {
300- PyObject * result = PyBytes_FromStringAndSize ( NULL , len );
301- if (result == NULL ) {
299+ PyBytesWriter * writer = PyBytesWriter_Create ( len );
300+ if (writer == NULL ) {
302301 PyBuffer_Release (& view );
303302 return NULL ;
304303 }
305- char * ptr = PyBytes_AsString ( result );
304+ char * ptr = PyBytesWriter_GetData ( writer );
306305 memcpy (ptr , view .buf , len );
307306 PyBuffer_Release (& view );
308307
@@ -315,15 +314,15 @@ fcntl_ioctl_impl(PyObject *module, int fd, unsigned long code, PyObject *arg,
315314 if (!async_err ) {
316315 PyErr_SetFromErrno (PyExc_OSError );
317316 }
318- Py_DECREF ( result );
317+ PyBytesWriter_Discard ( writer );
319318 return NULL ;
320319 }
321320 if (ptr [len ] != '\0' ) {
322321 PyErr_SetString (PyExc_SystemError , "buffer overflow" );
323- Py_DECREF ( result );
322+ PyBytesWriter_Discard ( writer );
324323 return NULL ;
325324 }
326- return result ;
325+ return PyBytesWriter_Finish ( writer ) ;
327326 }
328327#undef IOCTL_BUFSZ
329328 }
0 commit comments