@@ -1231,58 +1231,28 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
12311231 }
12321232
12331233
1234- case 'w' : { /* memory buffer, read-write access */
1234+ case 'w' : { /* "w*": memory buffer, read-write access */
12351235 void * * p = va_arg (* p_va , void * * );
1236- PyBufferProcs * pb = arg -> ob_type -> tp_as_buffer ;
1237- Py_ssize_t count ;
1238- int temp = -1 ;
1239- Py_buffer view ;
1240-
1241- if (pb && pb -> bf_releasebuffer && * format != '*' )
1242- /* Buffer must be released, yet caller does not use
1243- the Py_buffer protocol. */
1244- return converterr ("pinned buffer" , arg , msgbuf , bufsize );
12451236
1237+ if (* format != '*' )
1238+ return converterr (
1239+ "invalid use of 'w' format character" ,
1240+ arg , msgbuf , bufsize );
1241+ format ++ ;
12461242
1247- if (pb && pb -> bf_getbuffer && * format == '*' ) {
1248- /* Caller is interested in Py_buffer, and the object
1249- supports it directly. */
1250- format ++ ;
1251- if (PyObject_GetBuffer (arg , (Py_buffer * )p , PyBUF_WRITABLE ) < 0 ) {
1252- PyErr_Clear ();
1253- return converterr ("read-write buffer" , arg , msgbuf , bufsize );
1254- }
1255- if (addcleanup (p , freelist , cleanup_buffer )) {
1256- return converterr (
1257- "(cleanup problem)" ,
1258- arg , msgbuf , bufsize );
1259- }
1260- if (!PyBuffer_IsContiguous ((Py_buffer * )p , 'C' ))
1261- return converterr ("contiguous buffer" , arg , msgbuf , bufsize );
1262- break ;
1263- }
1264-
1265- /* Here we have processed w*, only w and w# remain. */
1266- if (pb == NULL ||
1267- pb -> bf_getbuffer == NULL ||
1268- ((temp = PyObject_GetBuffer (arg , & view ,
1269- PyBUF_SIMPLE )) != 0 ) ||
1270- view .readonly == 1 ) {
1271- if (temp == 0 ) {
1272- PyBuffer_Release (& view );
1273- }
1274- return converterr ("single-segment read-write buffer" ,
1275- arg , msgbuf , bufsize );
1243+ /* Caller is interested in Py_buffer, and the object
1244+ supports it directly. */
1245+ if (PyObject_GetBuffer (arg , (Py_buffer * )p , PyBUF_WRITABLE ) < 0 ) {
1246+ PyErr_Clear ();
1247+ return converterr ("read-write buffer" , arg , msgbuf , bufsize );
12761248 }
1277-
1278- if ((count = view .len ) < 0 )
1279- return converterr ("(unspecified)" , arg , msgbuf , bufsize );
1280- * p = view .buf ;
1281- if (* format == '#' ) {
1282- FETCH_SIZE ;
1283- STORE_SIZE (count );
1284- format ++ ;
1249+ if (addcleanup (p , freelist , cleanup_buffer )) {
1250+ return converterr (
1251+ "(cleanup problem)" ,
1252+ arg , msgbuf , bufsize );
12851253 }
1254+ if (!PyBuffer_IsContiguous ((Py_buffer * )p , 'C' ))
1255+ return converterr ("contiguous buffer" , arg , msgbuf , bufsize );
12861256 break ;
12871257 }
12881258
0 commit comments