@@ -353,7 +353,8 @@ _zstd_finalize_dict_impl(PyObject *module, PyBytesObject *custom_dict_bytes,
353353{
354354 Py_ssize_t chunks_number ;
355355 size_t * chunk_sizes = NULL ;
356- PyObject * dst_dict_bytes = NULL ;
356+ PyBytesWriter * dst_dict_bytes = NULL ;
357+ PyObject * result = NULL ;
357358 size_t zstd_ret ;
358359 ZDICT_params_t params ;
359360
@@ -372,7 +373,7 @@ _zstd_finalize_dict_impl(PyObject *module, PyBytesObject *custom_dict_bytes,
372373 }
373374
374375 /* Allocate dict buffer */
375- dst_dict_bytes = PyBytes_FromStringAndSize ( NULL , dict_size );
376+ dst_dict_bytes = PyBytesWriter_Create ( dict_size );
376377 if (dst_dict_bytes == NULL ) {
377378 goto error ;
378379 }
@@ -389,7 +390,8 @@ _zstd_finalize_dict_impl(PyObject *module, PyBytesObject *custom_dict_bytes,
389390 /* Finalize the dictionary */
390391 Py_BEGIN_ALLOW_THREADS
391392 zstd_ret = ZDICT_finalizeDictionary (
392- PyBytes_AS_STRING (dst_dict_bytes ), dict_size ,
393+ PyBytesWriter_GetData (dst_dict_bytes ),
394+ PyBytesWriter_GetSize (dst_dict_bytes ),
393395 PyBytes_AS_STRING (custom_dict_bytes ),
394396 Py_SIZE (custom_dict_bytes ),
395397 PyBytes_AS_STRING (samples_bytes ), chunk_sizes ,
@@ -404,18 +406,15 @@ _zstd_finalize_dict_impl(PyObject *module, PyBytesObject *custom_dict_bytes,
404406 }
405407
406408 /* Resize dict_buffer */
407- if (_PyBytes_Resize (& dst_dict_bytes , zstd_ret ) < 0 ) {
408- goto error ;
409- }
410-
411- goto success ;
409+ result = PyBytesWriter_FinishWithSize (dst_dict_bytes , zstd_ret );
410+ goto done ;
412411
413412error :
414- Py_CLEAR (dst_dict_bytes );
413+ PyBytesWriter_Discard (dst_dict_bytes );
415414
416- success :
415+ done :
417416 PyMem_Free (chunk_sizes );
418- return dst_dict_bytes ;
417+ return result ;
419418}
420419
421420
0 commit comments