Previously, roundup(bb->buffers.off % EROFS_BLKSIZ, alignsize) + incr + extrasize is a unsigned 64bit value and sgn(x) didn't work properly. Fix it.
Signed-off-by: Gao Xiang <[email protected]> --- include/erofs/defs.h | 5 +++-- lib/cache.c | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/include/erofs/defs.h b/include/erofs/defs.h index 15db4e3..db51350 100644 --- a/include/erofs/defs.h +++ b/include/erofs/defs.h @@ -136,9 +136,10 @@ typedef int64_t s64; type __max2 = (y); \ __max1 > __max2 ? __max1: __max2; }) -#define sgn(x) ({ \ +#define cmpsgn(x, y) ({ \ typeof(x) _x = (x); \ -(_x > 0) - (_x < 0); }) + typeof(y) _y = (y); \ +(_x > _y) - (_x < _y); }) #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) diff --git a/lib/cache.c b/lib/cache.c index 41d2d5d..e61b201 100644 --- a/lib/cache.c +++ b/lib/cache.c @@ -80,9 +80,9 @@ static int __erofs_battach(struct erofs_buffer_block *bb, bool dryrun) { const erofs_off_t alignedoffset = roundup(bb->buffers.off, alignsize); - const int oob = sgn(roundup(bb->buffers.off % EROFS_BLKSIZ, - alignsize) + incr + extrasize - - EROFS_BLKSIZ); + const int oob = cmpsgn(roundup(bb->buffers.off % EROFS_BLKSIZ, + alignsize) + incr + extrasize, + EROFS_BLKSIZ); bool tailupdate = false; erofs_blk_t blkaddr; -- 2.17.1
