diff --git a/src/calc.c b/src/calc.c
index 0a96a8337ce6c8a36da81a1a8d42a2096dff6e9b..90b52b01f4d25eabbbf46b23b4f840f6765e5d32 100644
--- a/src/calc.c
+++ b/src/calc.c
@@ -311,7 +311,7 @@ int calcDir(struct dir *dest, char *path) {
 
    /* count the size */
     if(!(d->flags & FF_EXL || d->flags & FF_OTHFS)) {
-      d->size = fs.st_blocks * 512;
+      d->size = fs.st_blocks * S_BLKSIZE;
       d->asize = fs.st_size;
       for(t = dest; t != NULL; t = t->parent) {
         t->size += d->size;
@@ -376,7 +376,7 @@ struct dir *showCalc(char *path) {
     return(NULL);
   }
   parent = calloc(sizeof(struct dir), 1);
-  parent->size = fs.st_blocks * 512;
+  parent->size = fs.st_blocks * S_BLKSIZE;
   parent->asize = fs.st_size;
   parent->flags |= FF_DIR;
   curdev = fs.st_dev;
diff --git a/src/ncdu.h b/src/ncdu.h
index dc5d0af5471fc572b966966627dff64e1f9a3bbe..745f959df7c376da4b21b5b0a1c5883cbab780cc 100644
--- a/src/ncdu.h
+++ b/src/ncdu.h
@@ -44,6 +44,11 @@
 #include <sys/time.h>
 #include <dirent.h>
 
+/* set S_BLKSIZE if not defined already in sys/stat.h */
+#ifndef S_BLKSIZE
+# define S_BLKSIZE 512
+#endif
+
 /* PATH_MAX 260 on Cygwin is too small for /proc/registry */
 #ifdef __CYGWIN__
 # if PATH_MAX < 1024