@@ -305,13 +305,41 @@ _ctypes_alloc_format_string_for_type(char code, int big_endian)
305305#else
306306# error SIZEOF__BOOL has an unexpected value
307307#endif /* SIZEOF__BOOL */
308+ #if defined(_Py_FFI_SUPPORT_C_COMPLEX )
309+ /* complex types */
310+ case 'F' :
311+ case 'D' :
312+ case 'G' :
313+ {
314+ result = PyMem_Malloc (4 );
315+ if (result == NULL ) {
316+ PyErr_NoMemory ();
317+ return NULL ;
318+ }
319+
320+ result [0 ] = big_endian ? '>' : '<' ;
321+ result [1 ] = 'Z' ;
322+ switch (code ) {
323+ case 'F' :
324+ result [2 ] = 'f' ;
325+ break ;
326+ case 'D' :
327+ result [2 ] = 'd' ;
328+ break ;
329+ default :
330+ result [2 ] = 'g' ;
331+ }
332+ result [3 ] = '\0' ;
333+ return result ;
334+ }
335+ #endif
308336 default :
309337 /* The standard-size code is the same as the ctypes one */
310338 pep_code = code ;
311339 break ;
312340 }
313341
314- result = PyMem_Malloc (4 );
342+ result = PyMem_Malloc (3 );
315343 if (result == NULL ) {
316344 PyErr_NoMemory ();
317345 return NULL ;
@@ -320,7 +348,6 @@ _ctypes_alloc_format_string_for_type(char code, int big_endian)
320348 result [0 ] = big_endian ? '>' : '<' ;
321349 result [1 ] = pep_code ;
322350 result [2 ] = '\0' ;
323- result [3 ] = '\0' ;
324351 return result ;
325352}
326353
@@ -3121,27 +3148,7 @@ PyCData_NewGetBuffer(PyObject *myself, Py_buffer *view, int flags)
31213148 view -> len = self -> b_size ;
31223149 view -> readonly = 0 ;
31233150 /* use default format character if not set */
3124- if (!info -> format ) {
3125- view -> format = "B" ;
3126- }
3127- else {
3128- view -> format = info -> format ;
3129- if (view -> format [1 ] == 'F' ) {
3130- view -> format [1 ] = 'Z' ;
3131- view -> format [2 ] = 'f' ;
3132- view -> format [3 ] = '\0' ;
3133- }
3134- if (view -> format [1 ] == 'D' ) {
3135- view -> format [1 ] = 'Z' ;
3136- view -> format [2 ] = 'd' ;
3137- view -> format [3 ] = '\0' ;
3138- }
3139- if (view -> format [1 ] == 'G' ) {
3140- view -> format [1 ] = 'Z' ;
3141- view -> format [2 ] = 'g' ;
3142- view -> format [3 ] = '\0' ;
3143- }
3144- }
3151+ view -> format = info -> format ? info -> format : "B" ;
31453152 view -> ndim = info -> ndim ;
31463153 view -> shape = info -> shape ;
31473154 view -> itemsize = item_info -> size ;
0 commit comments