sdl2: fix memory detection on 64-bit linux

This commit is contained in:
Ronald Kinard 2014-03-19 19:54:47 -05:00
parent 0fb3e3e568
commit cb55317533
2 changed files with 24 additions and 20 deletions

View file

@ -30,6 +30,10 @@ ifdef NOTERMIOS
endif endif
endif endif
ifdef LINUX64
OPTS+=-DLINUX64
endif
# #
#here is Solaris #here is Solaris
# #

View file

@ -2875,7 +2875,7 @@ const char *I_LocateWad(void)
return waddir; return waddir;
} }
#ifdef LINUX #if defined(LINUX) || defined(LINUX64)
#define MEMINFO_FILE "/proc/meminfo" #define MEMINFO_FILE "/proc/meminfo"
#define MEMTOTAL "MemTotal:" #define MEMTOTAL "MemTotal:"
#define MEMFREE "MemFree:" #define MEMFREE "MemFree:"
@ -2931,7 +2931,25 @@ UINT32 I_GetFreeMem(UINT32 *total)
if (total) if (total)
*total = 32 << 20; *total = 32 << 20;
return 32 << 20; return 32 << 20;
#elif defined (LINUX) #elif (defined (_WIN32) || (defined (_WIN32_WCE) && !defined (__GNUC__))) && !defined (_XBOX)
MEMORYSTATUS info;
info.dwLength = sizeof (MEMORYSTATUS);
GlobalMemoryStatus( &info );
if (total)
*total = (UINT32)info.dwTotalPhys;
return (UINT32)info.dwAvailPhys;
#elif defined (__OS2__)
UINT32 pr_arena;
if (total)
DosQuerySysInfo( QSV_TOTPHYSMEM, QSV_TOTPHYSMEM,
(PVOID) total, sizeof (UINT32));
DosQuerySysInfo( QSV_MAXPRMEM, QSV_MAXPRMEM,
(PVOID) &pr_arena, sizeof (UINT32));
return pr_arena;
#elif defined (LINUX) || defined (LINUX64)
/* Linux */ /* Linux */
char buf[1024]; char buf[1024];
char *memTag; char *memTag;
@ -2975,24 +2993,6 @@ UINT32 I_GetFreeMem(UINT32 *total)
if (total) if (total)
*total = totalKBytes << 10; *total = totalKBytes << 10;
return freeKBytes << 10; return freeKBytes << 10;
#elif (defined (_WIN32) || (defined (_WIN32_WCE) && !defined (__GNUC__))) && !defined (_XBOX)
MEMORYSTATUS info;
info.dwLength = sizeof (MEMORYSTATUS);
GlobalMemoryStatus( &info );
if (total)
*total = (UINT32)info.dwTotalPhys;
return (UINT32)info.dwAvailPhys;
#elif defined (__OS2__)
UINT32 pr_arena;
if (total)
DosQuerySysInfo( QSV_TOTPHYSMEM, QSV_TOTPHYSMEM,
(PVOID) total, sizeof (UINT32));
DosQuerySysInfo( QSV_MAXPRMEM, QSV_MAXPRMEM,
(PVOID) &pr_arena, sizeof (UINT32));
return pr_arena;
#else #else
// Guess 48 MB. // Guess 48 MB.
if (total) if (total)