From 9ad34f611f6dbc7c7b36dacc619337ef43214a50 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 25 Nov 2005 22:09:22 +0000 Subject: [PATCH] implemented wxGetFreeMemory() under IRIX (patch 1360356); made wxMemorySize always 64 bit as it can overflow even in 32 bit builds otherwise git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36250 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/utils.h | 15 ++++++--------- src/unix/utilsunx.cpp | 10 ++++++++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/include/wx/utils.h b/include/wx/utils.h index ed432b8582..03e24056b0 100644 --- a/include/wx/utils.h +++ b/include/wx/utils.h @@ -52,16 +52,13 @@ class WXDLLIMPEXP_CORE wxPoint; #define wxMax(a,b) (((a) > (b)) ? (a) : (b)) #define wxMin(a,b) (((a) < (b)) ? (a) : (b)) -// wxGetFreeMemory can return huge amount of memory on 64-bit platforms -// define wxMemorySize according to the type which best fits your platform -#if wxUSE_LONGLONG && defined(__WIN64__) - // 64 bit Windowses have sizeof(long) only 32 bit long - // we need to use wxLongLong to express memory sizes - #define wxMemorySize wxLongLong +// wxGetFreeMemory can return huge amount of memory on 32-bit platforms as well +// so to always use long long for its result type on all platforms which +// support it +#if wxUSE_LONGLONG + typedef wxLongLong wxMemorySize; #else - // 64 bit UNIX has sizeof(long) = 64 - // assume 32 bit platforms cannnot return more than 32bits of - #define wxMemorySize long + typedef long wxMemorySize; #endif // ---------------------------------------------------------------------------- diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index e8e31e5286..54354d378d 100644 --- a/src/unix/utilsunx.cpp +++ b/src/unix/utilsunx.cpp @@ -124,6 +124,12 @@ #include // for uname() #endif // HAVE_UNAME +// Used by wxGetFreeMemory(). +#ifdef __SGI__ + #include + #include // for SAGET and MINFO structures +#endif + // ---------------------------------------------------------------------------- // conditional compilation // ---------------------------------------------------------------------------- @@ -910,6 +916,10 @@ wxMemorySize wxGetFreeMemory() } #elif defined(__SUN__) && defined(_SC_AVPHYS_PAGES) return (wxMemorySize)(sysconf(_SC_AVPHYS_PAGES)*sysconf(_SC_PAGESIZE)); +#elif defined(__SGI__) + struct rminfo realmem; + if ( sysmp(MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0 ) + return ((wxMemorySize)realmem.physmem * sysconf(_SC_PAGESIZE)); //#elif defined(__FREEBSD__) -- might use sysctl() to find it out, probably #endif -- 2.45.2