From 7213b226d78032b18dd0b679894f346d534b0198 Mon Sep 17 00:00:00 2001 From: fengyichui <fengyichui@gmail.com> Date: Thu, 15 Nov 2018 17:14:29 +0800 Subject: [PATCH] Fix BLK_SHIFT may be wrong in some platforms #128 --- src/nnn.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/nnn.c b/src/nnn.c index 1bc93858..047c0ae1 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -417,6 +417,18 @@ static uchar crc8fast(uchar const message[], size_t n) return remainder; } +/* Get platform block shift */ +static int get_blk_shift(void) +{ + int shift; + for (shift = 0; shift < 32; ++shift) + { + if ((1<<shift) & S_BLKSIZE) + break; + } + return shift; +} + /* Messages show up at the bottom */ static void printmsg(const char *msg) { @@ -2905,7 +2917,7 @@ nochange: cfg.blkorder ^= 1; nftw_fn = &sum_bsizes; cfg.apparentsz = 0; - BLK_SHIFT = 9; + BLK_SHIFT = get_blk_shift(); } if (cfg.blkorder) { @@ -3399,6 +3411,9 @@ int main(int argc, char *argv[]) char *ipath = NULL; int opt; + // Get platform block shift + BLK_SHIFT = get_blk_shift(); + /* Confirm we are in a terminal */ if (!isatty(0) || !isatty(1)) { fprintf(stderr, "stdin or stdout is not a tty\n"); -- 2.51.0