diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index 2ed5f1b0f2..60f6e643c8 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -42,6 +42,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include +#if defined (__linux__) +#include +#endif + +#if defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__APPLE__) +#include +#include +#endif + qboolean stdinIsATTY; static char execBuffer[ 1024 ]; @@ -595,7 +604,33 @@ TODO */ qboolean Sys_LowPhysicalMemory( void ) { +#if defined (__linux__) + struct sysinfo info; + + if ( sysinfo(&info) == -1 ) + return qfalse; + + return info.totalram <= MEM_THRESHOLD; +#elif defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__APPLE__) + #if defined (__FreeBSD__) + int mib[2] = { CTL_HW, HW_PHYSMEM }; + #elif defined (__OpenBSD__) + int mib[2] = { CTL_HW, HW_PHYSMEM64 }; + #elif defined (__APPLE__) + int mib[2] = { CTL_HW, HW_MEMSIZE }; + #endif + + size_t len; + int64_t total_mem; + + len = sizeof(int64_t); + if ( sysctl(mib, 2, &total_mem, &len, NULL, 0) == -1 ) + return qfalse; + + return total_mem <= MEM_THRESHOLD; +#else return qfalse; +#endif } /*