]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix BLK_SHIFT may be wrong in some platforms #128
authorfengyichui <fengyichui@gmail.com>
Thu, 15 Nov 2018 09:14:29 +0000 (17:14 +0800)
committerfengyichui <fengyichui@gmail.com>
Thu, 15 Nov 2018 09:14:29 +0000 (17:14 +0800)
src/nnn.c

index 1bc93858c4ff080b057374891d385e54031be351..047c0ae16bde329ab1adaf9465f9097a7d70a10d 100644 (file)
--- 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");