This is a patch from the FreeBSD people:
[blender-staging.git] / source / blender / blenlib / intern / storage.c
index 5902b7dd68a54101ecfc97be262cdc27eb5cb524..f288dde5815c304537868be1959471844ddde725 100644 (file)
@@ -52,7 +52,7 @@
 
 #if defined (__sun__) || defined (__sun)
 #include <sys/statvfs.h> /* Other modern unix os's should probably use this also */
-#elif !defined(linux) && (defined(__sgi) || defined(__sparc) || defined(__sparc__))
+#elif !defined(__FreeBSD__) && !defined(linux) && (defined(__sgi) || defined(__sparc) || defined(__sparc__))
 #include <sys/statfs.h>
 #endif
 
@@ -209,7 +209,7 @@ double BLI_diskfree(char *dir)
 
 #if defined (__sun__) || defined (__sun)
        if (statvfs(name, &disk)) return(-1);   
-#elif !defined(linux) && (defined (__sgi) || defined(__sparc) || defined(__sparc__))
+#elif !defined(__FreeBSD__) && !defined(linux) && (defined (__sgi) || defined(__sparc) || defined(__sparc__))
        /* WARNING - This may not be supported by geeneric unix os's - Campbell */
        if (statfs(name, &disk, sizeof(struct statfs), 0)) return(-1);
 #endif
@@ -336,11 +336,11 @@ void BLI_adddirstrings()
        char size[250];
        static char * types[8] = {"---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx"};
        int num, mode;
-       int num1, num2, num3, num4;
+       off_t num1, num2, num3, num4, num5;
 #ifdef WIN32
        __int64 st_size;
 #else
-       long long st_size;
+       off_t st_size;
 #endif
        
        struct direntry * file;
@@ -402,7 +402,7 @@ void BLI_adddirstrings()
                 * will buy us some time until files get bigger than 4GB or until
                 * everyone starts using __USE_FILE_OFFSET64 or equivalent.
                 */
-               st_size= (unsigned int)files[num].s.st_size;
+               st_size= (off_t)files[num].s.st_size;
                
                num1= st_size % 1000;
                num2= st_size/1000;
@@ -411,11 +411,15 @@ void BLI_adddirstrings()
                num3= num3 % 1000;
                num4= st_size/(1000*1000*1000);
                num4= num4 % 1000;
-
-               if(num4) sprintf(files[num].size, "%3d %03d %03d %03d", num4, num3, num2, num1);
-               else if(num3) sprintf(files[num].size, "%7d %03d %03d", num3, num2, num1);
-               else if(num2) sprintf(files[num].size, "%11d %03d", num2, num1);
-               else if(num1) sprintf(files[num].size, "%15d", num1);
+               num5= st_size/(1000000000000LL);
+               num5= num5 % 1000;
+
+               if(num5)
+                       sprintf(files[num].size, "%1d %03d %03d %03d K", (int)num5, (int)num4, (int)num3, (int)num2);
+               else if(num4) sprintf(files[num].size, "%3d %03d %03d %03d", (int)num4, (int)num3, (int)num2, (int)num1);
+               else if(num3) sprintf(files[num].size, "%7d %03d %03d", (int)num3, (int)num2, (int)num1);
+               else if(num2) sprintf(files[num].size, "%11d %03d", (int)num2, (int)num1);
+               else if(num1) sprintf(files[num].size, "%15d", (int)num1);
                else sprintf(files[num].size, "0");
 
                strftime(datum, 32, "%d-%b-%y %H:%M", tm);