From 776884f0fe7eba94ce653cdac1442a1d90fcb851 Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Sun, 12 Apr 2020 00:03:36 +0200 Subject: [PATCH] GFX2_DiskFreeSpace() --- src/help.c | 74 ++------------------------------------------------ src/osdep.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++--- src/osdep.h | 5 ++++ 3 files changed, 80 insertions(+), 76 deletions(-) diff --git a/src/help.c b/src/help.c index 4b758ea6..ae8a0e84 100644 --- a/src/help.c +++ b/src/help.c @@ -26,36 +26,9 @@ #include #include -#if defined(__WIN32__) || defined(WIN32) - #include #if defined(_MSC_VER) && _MSC_VER < 1900 #define snprintf _snprintf #endif -#elif defined(__macosx__) || defined(__FreeBSD__) || defined(__OpenBSD__) - #include - #include -#elif defined(__NetBSD__) - #include -#elif defined (__linux__) || defined(__SYLLABLE__) - #include -#elif defined (__HAIKU__) - #include "haiku.h" -#elif defined (__MINT__) - #include - #include - #include -#elif defined(__AROS__) - #include -#endif - -#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) -#include -#endif - -#if defined(__macosx__) -#import -#import -#endif #if defined(USE_SDL) || defined(USE_SDL2) #include @@ -756,7 +729,6 @@ void Button_Stats(int btn) qword mem_size = 0; int y; #if defined (__MINT__) - _DISKINFO drvInfo; unsigned long STRAM = 0, TTRAM = 0; char helpBuf[3][16]; #endif @@ -927,50 +899,8 @@ void Button_Stats(int btn) Print_in_window(162,y,buffer,STATS_DATA_COLOR,MC_Black); y+=8; -#if defined(__WIN32__) || defined(WIN32) - { - ULARGE_INTEGER tailleU, totalbytes, totalfreebytes; - if (GetDiskFreeSpaceExA(Main.selector.Directory, &tailleU, &totalbytes, &totalfreebytes)) - { - GFX2_Log(GFX2_DEBUG, "%s: %luMB free for GrafX2 (total %luMB, %luMB free)\n", - Main.selector.Directory, (unsigned long)(tailleU.QuadPart >> 20), - (unsigned long)(totalbytes.QuadPart >> 20), (unsigned long)(totalfreebytes.QuadPart >> 20)); - mem_size = tailleU.QuadPart; - } - else - { - mem_size = 0; - GFX2_Log(GFX2_ERROR, "GetDiskFreeSpaceExA() failed\n"); - } - } -#elif defined(__linux__) || defined(__macosx__) || defined(__FreeBSD__) || defined(__SYLLABLE__) || defined(__AROS__) || defined(__OpenBSD__) - { - struct statfs disk_info; - statfs(Main.selector.Directory,&disk_info); - mem_size=(qword) disk_info.f_bfree * (qword) disk_info.f_bsize; - } -#elif defined(__NetBSD__) - { - struct statvfs disk_info; - statvfs(Main.selector.Directory,&disk_info); - mem_size=(qword) disk_info.f_bfree * (qword) disk_info.f_bsize; - } -#elif defined(__HAIKU__) - mem_size = haiku_get_free_space(Main.selector.Directory); -#elif defined (__MINT__) - mem_size=0; - Dfree(&drvInfo,0); - //number of free clusters*sectors per cluster*bytes per sector; - // reports current drive - mem_size=drvInfo.b_free*drvInfo.b_clsiz*drvInfo.b_secsiz; -#else - #define NODISKSPACESUPPORT - // Free disk space is only for shows. Other platforms can display 0. - #if !defined(__SWITCH__) - #warning "Missing code for your platform !!! Check and correct please :)" - #endif - mem_size=0; -#endif + + mem_size = GFX2_DiskFreeSpace(Main.selector.Directory); // Display free space if (mem_size != 0) diff --git a/src/osdep.c b/src/osdep.c index ca5e8109..79bbe33e 100644 --- a/src/osdep.c +++ b/src/osdep.c @@ -24,12 +24,38 @@ */ #if defined(USE_SDL) || defined(USE_SDL2) #include -#else -#if defined(WIN32) -#include -#else +#elif !defined(WIN32) #include #endif + +#if defined(WIN32) +#include +#endif + +#if defined(__macosx__) || defined(__FreeBSD__) || defined(__OpenBSD__) + #include + #include +#elif defined(__NetBSD__) + #include +#elif defined (__linux__) || defined(__SYLLABLE__) + #include +#elif defined (__HAIKU__) + #include "haiku.h" +#elif defined (__MINT__) + #include + #include + #include +#elif defined(__AROS__) + #include +#endif + +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) +#include +#endif + +#if defined(__macosx__) +#import +#import #endif #include "struct.h" @@ -86,6 +112,49 @@ void GFX2_OpenURL(const char * buffer, unsigned int len) #endif } +qword GFX2_DiskFreeSpace(const char * path) +{ +#if defined(__WIN32__) || defined(WIN32) + ULARGE_INTEGER tailleU, totalbytes, totalfreebytes; + if (GetDiskFreeSpaceExA(path, &tailleU, &totalbytes, &totalfreebytes)) + { + GFX2_Log(GFX2_DEBUG, "%s: %luMB free for GrafX2 (total %luMB, %luMB free)\n", + path, (unsigned long)(tailleU.QuadPart >> 20), + (unsigned long)(totalbytes.QuadPart >> 20), (unsigned long)(totalfreebytes.QuadPart >> 20)); + return tailleU.QuadPart; + } + else + { + GFX2_Log(GFX2_ERROR, "GetDiskFreeSpaceExA() failed\n"); + return 0; + } +#elif defined(__linux__) || defined(__macosx__) || defined(__FreeBSD__) || defined(__SYLLABLE__) || defined(__AROS__) || defined(__OpenBSD__) + struct statfs disk_info; + statfs(path ,&disk_info); + return (qword) disk_info.f_bfree * (qword) disk_info.f_bsize; +#elif defined(__NetBSD__) + struct statvfs disk_info; + statvfs(path, &disk_info); + return (qword) disk_info.f_bfree * (qword) disk_info.f_bsize; +#elif defined(__HAIKU__) + return haiku_get_free_space(path); +#elif defined (__MINT__) + _DISKINFO drvInfo; + + Dfree(&drvInfo, 0); + //number of free clusters*sectors per cluster*bytes per sector; + // reports current drive + return drvInfo.b_free*drvInfo.b_clsiz*drvInfo.b_secsiz; +#else + #define NODISKSPACESUPPORT + // Free disk space is only for shows. Other platforms can display 0. + #if !defined(__SWITCH__) + #warning "Missing code for your platform !!! Check and correct please :)" + #endif + return 0; +#endif +} + #if defined(__macosx__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__SWITCH__) #if defined(__OpenBSD__) #include diff --git a/src/osdep.h b/src/osdep.h index 7dbda127..2a6a6cfb 100644 --- a/src/osdep.h +++ b/src/osdep.h @@ -40,6 +40,11 @@ dword GFX2_GetTicks(void); */ void GFX2_OpenURL(const char * url, unsigned int len); +/** + * Disk free space + */ +qword GFX2_DiskFreeSpace(const char * path); + #if defined (__MINT__) void Atari_Memory_free(unsigned long *stRam, unsigned long *ttRam); #else