88from  cpython.bytes cimport PyBytes_AS_STRING, PyBytes_FromStringAndSize
99from  cpython.memoryview cimport PyMemoryView_GET_BUFFER
1010
11- from  .compat_ext cimport Buffer
12- from  .compat_ext import  Buffer
1311from  .compat_ext cimport PyBytes_RESIZE, ensure_continguous_memoryview
1412
1513from  .compat import  ensure_contiguous_ndarray
@@ -222,23 +220,24 @@ def decompress(source, dest=None):
222220            raise  RuntimeError (' Zstd decompression error: invalid input data'  )
223221
224222        if  dest_size ==  ZSTD_CONTENTSIZE_UNKNOWN and  dest is  None :
225-             return  stream_decompress(source_buffer )
223+             return  stream_decompress(source_pb )
226224
227225        #  setup destination buffer
228226        if  dest is  None :
229227            #  allocate memory
230228            dest_1d =  dest =  PyBytes_FromStringAndSize(NULL , dest_size)
231229        else :
232230            dest_1d =  ensure_contiguous_ndarray(dest)
233-             if  dest_size ==  ZSTD_CONTENTSIZE_UNKNOWN:
234-                 dest_size =  dest_buffer.nbytes
235231
236232        #  obtain dest memoryview
237233        dest_mv =  memoryview(dest_1d)
238234        dest_pb =  PyMemoryView_GET_BUFFER(dest_mv)
239235        dest_ptr =  < char * > dest_pb.buf
240236        dest_nbytes =  dest_pb.len
241237
238+         if  dest_size ==  ZSTD_CONTENTSIZE_UNKNOWN:
239+             dest_size =  dest_nbytes
240+ 
242241        #  validate output buffer
243242        if  dest_nbytes <  dest_size:
244243            raise  ValueError (' destination buffer too small; expected at least %s , ' 
@@ -261,12 +260,12 @@ def decompress(source, dest=None):
261260
262261    return  dest
263262
264- cdef stream_decompress(Buffer source_buffer ):
263+ cdef stream_decompress(const Py_buffer *  source_pb ):
265264    """ Decompress data of unknown size
266265
267266        Parameters 
268267        ---------- 
269-         source : Buffer  
268+         source : Py_buffer  
270269            Compressed data buffer 
271270
272271        Returns 
@@ -276,10 +275,9 @@ cdef stream_decompress(Buffer source_buffer):
276275    """  
277276
278277    cdef:
279-         char  * source_ptr
278+         const  char  * source_ptr
280279        void  * dest_ptr
281280        void  * new_dst
282-         Buffer dest_buffer =  None 
283281        size_t source_size, dest_size, decompressed_size
284282        size_t DEST_GROWTH_SIZE, status
285283        ZSTD_inBuffer input 
@@ -290,8 +288,8 @@ cdef stream_decompress(Buffer source_buffer):
290288    #  one completely block in all circumstances
291289    DEST_GROWTH_SIZE =  ZSTD_DStreamOutSize();
292290
293-     source_ptr =  source_buffer.ptr 
294-     source_size =  source_buffer.nbytes 
291+     source_ptr =  < const  char * > source_pb.buf 
292+     source_size =  source_pb.len 
295293
296294    #  unknown content size, guess it is twice the size as the source
297295    dest_size =  source_size *  2 
0 commit comments