From e469c54f76f6d24f92389b4e8a27b9cce7152888 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 9 Mar 2022 22:39:25 +0100 Subject: [PATCH] Fix COSOperator::getSystemMemory The values it returns are in Kilobytes and it was broken on macOS. --- include/IOSOperator.h | 4 ++-- source/Irrlicht/COSOperator.cpp | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/IOSOperator.h b/include/IOSOperator.h index 5d2d42aa..b195aed7 100644 --- a/include/IOSOperator.h +++ b/include/IOSOperator.h @@ -33,8 +33,8 @@ public: virtual const c8* getTextFromClipboard() const = 0; //! Get the total and available system RAM - /** \param totalBytes: will contain the total system memory in bytes - \param availableBytes: will contain the available memory in bytes + /** \param totalBytes: will contain the total system memory in Kilobytes (1024 B) + \param availableBytes: will contain the available memory in Kilobytes (1024 B) \return True if successful, false if not */ virtual bool getSystemMemory(u32* totalBytes, u32* availableBytes) const = 0; diff --git a/source/Irrlicht/COSOperator.cpp b/source/Irrlicht/COSOperator.cpp index a6f9461d..25b04ad8 100644 --- a/source/Irrlicht/COSOperator.cpp +++ b/source/Irrlicht/COSOperator.cpp @@ -163,24 +163,19 @@ bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const *Avail = (u32)(MemoryStatusEx.ullAvailPhys>>10); return true; -#elif defined(_IRR_POSIX_API_) && !defined(__FreeBSD__) -#if defined(_SC_PHYS_PAGES) && defined(_SC_AVPHYS_PAGES) +#elif defined(_IRR_POSIX_API_) && defined(_SC_PHYS_PAGES) && defined(_SC_AVPHYS_PAGES) long ps = sysconf(_SC_PAGESIZE); long pp = sysconf(_SC_PHYS_PAGES); long ap = sysconf(_SC_AVPHYS_PAGES); - if ((ps==-1)||(pp==-1)||(ap==-1)) + if (ps == -1 || (Total && pp == -1) || (Avail && ap == -1)) return false; if (Total) - *Total = (u32)((ps*(long long)pp)>>10); + *Total = (u32)((pp>>10)*ps); if (Avail) - *Avail = (u32)((ps*(long long)ap)>>10); + *Avail = (u32)((ap>>10)*ps); return true; -#else - // TODO: implement for non-availability of symbols/features - return false; -#endif #elif defined(_IRR_OSX_PLATFORM_) int mib[2]; int64_t physical_memory; @@ -191,6 +186,11 @@ bool COSOperator::getSystemMemory(u32* Total, u32* Avail) const mib[1] = HW_MEMSIZE; length = sizeof(int64_t); sysctl(mib, 2, &physical_memory, &length, NULL, 0); + + if (Total) + *Total = (u32)(physical_memory>>10); + if (Avail) + *Avail = (u32)(physical_memory>>10); // we don't know better return true; #else // TODO: implement for others