diff --git a/src/borg/chunker.pyx b/src/borg/chunker.pyx index fde9d7bfa..2341bd275 100644 --- a/src/borg/chunker.pyx +++ b/src/borg/chunker.pyx @@ -330,9 +330,12 @@ table_base = [ 0xc5ae37bb, 0xa76ce12a, 0x8150d8f3, 0x2ec29218, 0xa35f0984, 0x48c0647e, 0x0b5ff98c, 0x71893f7b ] -# Barrel shift macro from C -cdef inline uint32_t BARREL_SHIFT(uint32_t v, uint32_t shift): - return ((v << shift) | (v >> ((32 - shift) & 0x1f))) +# This seems to be the most reliable way to inline this code, using a C preprocessor macro: +cdef extern from *: + """ + #define BARREL_SHIFT(v, shift) (((v) << (shift)) | ((v) >> (((32 - (shift)) & 0x1f)))) + """ + uint32_t BARREL_SHIFT(uint32_t v, uint32_t shift) cdef uint32_t* buzhash_init_table(uint32_t seed):