@@ -34,7 +34,7 @@ from cpython.mem cimport PyMem_Malloc, PyMem_Free
34
34
from cpython.buffer cimport PyBUF_READ, PyBUF_C_CONTIGUOUS, PyObject_GetBuffer, \
35
35
PyBuffer_Release
36
36
from cpython.bytes cimport PyBytes_FromStringAndSize
37
-
37
+ from cpython.long cimport PyLong_AsUnsignedLongMask
38
38
39
39
cdef extern from " <Python.h>" :
40
40
const Py_ssize_t PY_SSIZE_T_MAX
@@ -86,41 +86,43 @@ if ISAL_DEF_MAX_HIST_BITS > zlib.MAX_WBITS:
86
86
" Please contact the developers." )
87
87
88
88
89
- def adler32 (data , unsigned int value = 1 ):
89
+ def adler32 (data , value = 1 ):
90
90
"""
91
91
Computes an Adler-32 checksum of *data*. Returns the checksum as unsigned
92
92
32-bit integer.
93
93
94
94
:param data: Binary data (bytes, bytearray, memoryview).
95
95
:param value: The starting value of the checksum.
96
96
"""
97
+ cdef unsigned long init = PyLong_AsUnsignedLongMask(value)
97
98
cdef Py_buffer buffer_data
98
99
cdef Py_buffer* buffer = & buffer_data
99
100
if PyObject_GetBuffer(data, buffer , PyBUF_READ & PyBUF_C_CONTIGUOUS) != 0 :
100
101
raise TypeError (" Failed to get buffer" )
101
102
try :
102
103
if buffer .len > UINT64_MAX:
103
104
raise ValueError (" Data too big for adler32" )
104
- return isal_adler32(value , < unsigned char * > buffer .buf, buffer .len)
105
+ return isal_adler32(init , < unsigned char * > buffer .buf, buffer .len)
105
106
finally :
106
107
PyBuffer_Release(buffer )
107
108
108
- def crc32 (data , unsigned int value = 0 ):
109
+ def crc32 (data , value = 0 ):
109
110
"""
110
111
Computes a CRC-32 checksum of *data*. Returns the checksum as unsigned
111
112
32-bit integer.
112
113
113
114
:param data: Binary data (bytes, bytearray, memoryview).
114
115
:param value: The starting value of the checksum.
115
116
"""
117
+ cdef unsigned long init = PyLong_AsUnsignedLongMask(value)
116
118
cdef Py_buffer buffer_data
117
119
cdef Py_buffer* buffer = & buffer_data
118
120
if PyObject_GetBuffer(data, buffer , PyBUF_READ & PyBUF_C_CONTIGUOUS) != 0 :
119
121
raise TypeError (" Failed to get buffer" )
120
122
try :
121
123
if buffer .len > UINT64_MAX:
122
124
raise ValueError (" Data too big for adler32" )
123
- return crc32_gzip_refl(value , < unsigned char * > buffer .buf, buffer .len)
125
+ return crc32_gzip_refl(init , < unsigned char * > buffer .buf, buffer .len)
124
126
finally :
125
127
PyBuffer_Release(buffer )
126
128
0 commit comments