ChangeSet ID: 21170 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/08 10:10:02
Modified files: dlls/kernel : heap.c
Log message: Robert Lunnon bobl@optushome.com.au Implement GlobalMemoryStatusEx for Solaris.
Patch: http://cvs.winehq.org/patch.py?id=21170
Old revision New revision Changes Path 1.20 1.21 +40 -3 wine/dlls/kernel/heap.c
Index: wine/dlls/kernel/heap.c diff -u -p wine/dlls/kernel/heap.c:1.20 wine/dlls/kernel/heap.c:1.21 --- wine/dlls/kernel/heap.c:1.20 8 Nov 2005 16:10: 2 -0000 +++ wine/dlls/kernel/heap.c 8 Nov 2005 16:10: 2 -0000 @@ -40,6 +40,16 @@ # include <unistd.h> #endif
+#ifdef sun +/* FIXME: Unfortunately swapctl can't be used with largefile.... */ +# undef _FILE_OFFSET_BITS +# define _FILE_OFFSET_BITS 32 +# include <sys/resource.h> +# include <sys/stat.h> +# include <sys/swap.h> +#endif + + #include "windef.h" #include "winbase.h" #include "winerror.h" @@ -1132,6 +1142,12 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMO int size_sys; int mib[2] = { CTL_HW }; #endif +#ifdef sun + long pagesize,maxpages,freepages,swapspace,swapfree; + struct anoninfo swapinf; + int rval; +#endif + if (time(NULL)==cache_lastchecked) { memcpy(lpmemex,&cached_memstatus,sizeof(*lpmemex)); return TRUE; @@ -1200,9 +1216,9 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMO if (tmp && *tmp) { lpmemex->ullTotalPhys = *tmp; - free(tmp); - mib[1] = HW_USERMEM; - sysctl(mib, 2, NULL, &size_sys, NULL, 0); + free(tmp); + mib[1] = HW_USERMEM; + sysctl(mib, 2, NULL, &size_sys, NULL, 0); tmp = malloc(size_sys * sizeof(int)); sysctl(mib, 2, tmp, &size_sys, NULL, 0); if (tmp && *tmp) @@ -1221,6 +1237,27 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMO free(tmp);
} +#elif defined ( sun ) + pagesize=sysconf(_SC_PAGESIZE); + maxpages=sysconf(_SC_PHYS_PAGES); + freepages=sysconf(_SC_AVPHYS_PAGES); + rval=swapctl(SC_AINFO, &swapinf); + if(rval >-1) + { + swapspace=swapinf.ani_max*pagesize; + swapfree=swapinf.ani_free*pagesize; + }else + { + + WARN("Swap size cannot be determined , assuming equal to physical memory\n"); + swapspace=maxpages*pagesize; + swapfree=maxpages*pagesize; + } + lpmemex->ullTotalPhys=pagesize*maxpages; + lpmemex->ullAvailPhys = pagesize*freepages; + lpmemex->ullTotalPageFile = swapspace; + lpmemex->ullAvailPageFile = swapfree; + lpmemex->dwMemoryLoad = lpmemex->ullTotalPhys - lpmemex->ullAvailPhys; #endif
/* Project2k refuses to start if it sees less than 1Mb of free swap */