hashindex: clean void* arithmetic up #2677

lowlevel: clean void* arithmetic up
unpack: repalce nonstandard false with 0
This commit is contained in:
Emmo Emminghaus 2018-10-24 21:40:05 +02:00
parent 62de891ada
commit f8ef6af454
3 changed files with 32 additions and 32 deletions

View File

@ -116,7 +116,7 @@ static inline void unpack_init_user_state(unpack_user *u)
{
u->last_error = NULL;
u->level = 0;
u->inside_chunks = false;
u->inside_chunks = 0;
u->expect = expect_item_begin;
}

View File

@ -599,7 +599,7 @@ cdef class _AEAD_BASE:
raise CryptoError('EVP_CIPHER_CTX_ctrl SET IVLEN failed')
if not EVP_DecryptInit_ex(self.ctx, NULL, NULL, self.enc_key, iv):
raise CryptoError('EVP_DecryptInit_ex failed')
if not EVP_CIPHER_CTX_ctrl(self.ctx, EVP_CTRL_GCM_SET_TAG, self.mac_len, <void *> idata.buf+hlen):
if not EVP_CIPHER_CTX_ctrl(self.ctx, EVP_CTRL_GCM_SET_TAG, self.mac_len, <const unsigned char *> idata.buf+hlen):
raise CryptoError('EVP_CIPHER_CTX_ctrl SET TAG failed')
rc = EVP_DecryptUpdate(self.ctx, NULL, &olen, <const unsigned char*> idata.buf+aoffset, alen)
if not rc:

View File

@ -28,10 +28,10 @@ cdef extern from "_hashindex.c":
int hashindex_len(HashIndex *index)
int hashindex_size(HashIndex *index)
void hashindex_write(HashIndex *index, object file_py) except *
void *hashindex_get(HashIndex *index, void *key)
void *hashindex_next_key(HashIndex *index, void *key)
int hashindex_delete(HashIndex *index, void *key)
int hashindex_set(HashIndex *index, void *key, void *value)
unsigned char *hashindex_get(HashIndex *index, unsigned char *key)
unsigned char *hashindex_next_key(HashIndex *index, unsigned char *key)
int hashindex_delete(HashIndex *index, unsigned char *key)
int hashindex_set(HashIndex *index, unsigned char *key, void *value)
uint64_t hashindex_compact(HashIndex *index)
uint32_t _htole32(uint32_t v)
uint32_t _le32toh(uint32_t v)
@ -127,7 +127,7 @@ cdef class IndexBase:
def __delitem__(self, key):
assert len(key) == self.key_size
rc = hashindex_delete(self.index, <char *>key)
rc = hashindex_delete(self.index, <unsigned char *>key)
if rc == 1:
return # success
if rc == -1:
@ -170,7 +170,7 @@ cdef class FuseVersionsIndex(IndexBase):
def __getitem__(self, key):
cdef FuseVersionsElement *data
assert len(key) == self.key_size
data = <FuseVersionsElement *>hashindex_get(self.index, <char *>key)
data = <FuseVersionsElement *>hashindex_get(self.index, <unsigned char *>key)
if data == NULL:
raise KeyError(key)
return _le32toh(data.version), PyBytes_FromStringAndSize(data.hash, 16)
@ -184,12 +184,12 @@ cdef class FuseVersionsIndex(IndexBase):
raise TypeError("Expected bytes of length 16 for second value")
memcpy(data.hash, PyBytes_AS_STRING(value[1]), 16)
data.version = _htole32(data.version)
if not hashindex_set(self.index, <char *>key, <void *> &data):
if not hashindex_set(self.index, <unsigned char *>key, <void *> &data):
raise Exception('hashindex_set failed')
def __contains__(self, key):
assert len(key) == self.key_size
return hashindex_get(self.index, <char *>key) != NULL
return hashindex_get(self.index, <unsigned char *>key) != NULL
cdef class NSIndex(IndexBase):
@ -198,7 +198,7 @@ cdef class NSIndex(IndexBase):
def __getitem__(self, key):
assert len(key) == self.key_size
data = <uint32_t *>hashindex_get(self.index, <char *>key)
data = <uint32_t *>hashindex_get(self.index, <unsigned char *>key)
if not data:
raise KeyError(key)
cdef uint32_t segment = _le32toh(data[0])
@ -212,25 +212,25 @@ cdef class NSIndex(IndexBase):
assert segment <= _MAX_VALUE, "maximum number of segments reached"
data[0] = _htole32(segment)
data[1] = _htole32(value[1])
if not hashindex_set(self.index, <char *>key, data):
if not hashindex_set(self.index, <unsigned char *>key, data):
raise Exception('hashindex_set failed')
def __contains__(self, key):
cdef uint32_t segment
assert len(key) == self.key_size
data = <uint32_t *>hashindex_get(self.index, <char *>key)
data = <uint32_t *>hashindex_get(self.index, <unsigned char *>key)
if data != NULL:
segment = _le32toh(data[0])
assert segment <= _MAX_VALUE, "maximum number of segments reached"
return data != NULL
def iteritems(self, marker=None):
cdef const void *key
cdef const unsigned char *key
iter = NSKeyIterator(self.key_size)
iter.idx = self
iter.index = self.index
if marker:
key = hashindex_get(self.index, <char *>marker)
key = hashindex_get(self.index, <unsigned char *>marker)
if marker is None:
raise IndexError
iter.key = key - self.key_size
@ -240,7 +240,7 @@ cdef class NSIndex(IndexBase):
cdef class NSKeyIterator:
cdef NSIndex idx
cdef HashIndex *index
cdef const void *key
cdef const unsigned char *key
cdef int key_size
cdef int exhausted
@ -255,7 +255,7 @@ cdef class NSKeyIterator:
def __next__(self):
if self.exhausted:
raise StopIteration
self.key = hashindex_next_key(self.index, <char *>self.key)
self.key = hashindex_next_key(self.index, <unsigned char *>self.key)
if not self.key:
self.exhausted = 1
raise StopIteration
@ -289,7 +289,7 @@ cdef class ChunkIndex(IndexBase):
def __getitem__(self, key):
assert len(key) == self.key_size
data = <uint32_t *>hashindex_get(self.index, <char *>key)
data = <uint32_t *>hashindex_get(self.index, <unsigned char *>key)
if not data:
raise KeyError(key)
cdef uint32_t refcount = _le32toh(data[0])
@ -304,12 +304,12 @@ cdef class ChunkIndex(IndexBase):
data[0] = _htole32(refcount)
data[1] = _htole32(value[1])
data[2] = _htole32(value[2])
if not hashindex_set(self.index, <char *>key, data):
if not hashindex_set(self.index, <unsigned char *>key, data):
raise Exception('hashindex_set failed')
def __contains__(self, key):
assert len(key) == self.key_size
data = <uint32_t *>hashindex_get(self.index, <char *>key)
data = <uint32_t *>hashindex_get(self.index, <unsigned char *>key)
if data != NULL:
assert _le32toh(data[0]) <= _MAX_VALUE, "invalid reference count"
return data != NULL
@ -317,7 +317,7 @@ cdef class ChunkIndex(IndexBase):
def incref(self, key):
"""Increase refcount for 'key', return (refcount, size, csize)"""
assert len(key) == self.key_size
data = <uint32_t *>hashindex_get(self.index, <char *>key)
data = <uint32_t *>hashindex_get(self.index, <unsigned char *>key)
if not data:
raise KeyError(key)
cdef uint32_t refcount = _le32toh(data[0])
@ -330,7 +330,7 @@ cdef class ChunkIndex(IndexBase):
def decref(self, key):
"""Decrease refcount for 'key', return (refcount, size, csize)"""
assert len(key) == self.key_size
data = <uint32_t *>hashindex_get(self.index, <char *>key)
data = <uint32_t *>hashindex_get(self.index, <unsigned char *>key)
if not data:
raise KeyError(key)
cdef uint32_t refcount = _le32toh(data[0])
@ -342,12 +342,12 @@ cdef class ChunkIndex(IndexBase):
return refcount, _le32toh(data[1]), _le32toh(data[2])
def iteritems(self, marker=None):
cdef const void *key
cdef const unsigned char *key
iter = ChunkKeyIterator(self.key_size)
iter.idx = self
iter.index = self.index
if marker:
key = hashindex_get(self.index, <char *>marker)
key = hashindex_get(self.index, <unsigned char *>marker)
if marker is None:
raise IndexError
iter.key = key - self.key_size
@ -357,7 +357,7 @@ cdef class ChunkIndex(IndexBase):
cdef uint64_t size = 0, csize = 0, unique_size = 0, unique_csize = 0, chunks = 0, unique_chunks = 0
cdef uint32_t *values
cdef uint32_t refcount
cdef void *key = NULL
cdef unsigned char *key = NULL
while True:
key = hashindex_next_key(self.index, key)
@ -391,7 +391,7 @@ cdef class ChunkIndex(IndexBase):
cdef uint32_t our_refcount, chunk_size, chunk_csize
cdef const uint32_t *our_values
cdef const uint32_t *master_values
cdef const void *key = NULL
cdef const unsigned char *key = NULL
cdef HashIndex *master = master_index.index
while True:
@ -423,9 +423,9 @@ cdef class ChunkIndex(IndexBase):
data[0] = _htole32(refs)
data[1] = _htole32(size)
data[2] = _htole32(csize)
self._add(<char*> key, data)
self._add(<unsigned char*> key, data)
cdef _add(self, void *key, uint32_t *data):
cdef _add(self, unsigned char *key, uint32_t *data):
cdef uint64_t refcount1, refcount2, result64
values = <uint32_t*> hashindex_get(self.index, key)
if values:
@ -442,7 +442,7 @@ cdef class ChunkIndex(IndexBase):
raise Exception('hashindex_set failed')
def merge(self, ChunkIndex other):
cdef void *key = NULL
cdef unsigned char *key = NULL
while True:
key = hashindex_next_key(other.index, key)
@ -451,7 +451,7 @@ cdef class ChunkIndex(IndexBase):
self._add(key, <uint32_t*> (key + self.key_size))
def zero_csize_ids(self):
cdef void *key = NULL
cdef unsigned char *key = NULL
cdef uint32_t *values
entries = []
while True:
@ -470,7 +470,7 @@ cdef class ChunkIndex(IndexBase):
cdef class ChunkKeyIterator:
cdef ChunkIndex idx
cdef HashIndex *index
cdef const void *key
cdef const unsigned char *key
cdef int key_size
cdef int exhausted
@ -485,7 +485,7 @@ cdef class ChunkKeyIterator:
def __next__(self):
if self.exhausted:
raise StopIteration
self.key = hashindex_next_key(self.index, <char *>self.key)
self.key = hashindex_next_key(self.index, <unsigned char *>self.key)
if not self.key:
self.exhausted = 1
raise StopIteration