diff --git a/dlls/kernel/kernel32.spec b/dlls/kernel/kernel32.spec index 59a3a47fd47..024541cdb3b 100644 --- a/dlls/kernel/kernel32.spec +++ b/dlls/kernel/kernel32.spec @@ -1111,7 +1111,6 @@ @ stdcall LocalLock16(long) @ stdcall LocalUnlock16(long) @ stdcall LockResource16(long) -@ stdcall MemManInfo16(ptr) @ stdcall SelectorAccessRights16(long long long) @ stdcall SetSelectorBase(long long) @ stdcall SetSelectorLimit16(long long) diff --git a/include/toolhelp.h b/dlls/kernel/toolhelp.h similarity index 100% rename from include/toolhelp.h rename to dlls/kernel/toolhelp.h diff --git a/dlls/winedos/int31.c b/dlls/winedos/int31.c index e2dfa96df35..ff54f57b495 100644 --- a/dlls/winedos/int31.c +++ b/dlls/winedos/int31.c @@ -35,7 +35,6 @@ #include "wine/debug.h" #include "wine/exception.h" #include "thread.h" -#include "toolhelp.h" WINE_DEFAULT_DEBUG_CHANNEL(int31); @@ -1193,18 +1192,36 @@ void WINAPI DOSVM_Int31Handler( CONTEXT86 *context ) case 0x0500: /* Get free memory information */ TRACE("get free memory information\n"); { - MEMMANINFO mmi; - void *ptr = CTX_SEG_OFF_TO_LIN( context, - context->SegEs, - context->Edi ); - - mmi.dwSize = sizeof( mmi ); - MemManInfo16( &mmi ); + MEMORYSTATUS status; /* the layout is just the same as MEMMANINFO, but without * the dwSize entry. */ - memcpy( ptr, ((char*)&mmi)+4, sizeof(mmi)-4 ); + struct + { + DWORD dwLargestFreeBlock; + DWORD dwMaxPagesAvailable; + DWORD dwMaxPagesLockable; + DWORD dwTotalLinearSpace; + DWORD dwTotalUnlockedPages; + DWORD dwFreePages; + DWORD dwTotalPages; + DWORD dwFreeLinearSpace; + DWORD dwSwapFilePages; + WORD wPageSize; + } *info = CTX_SEG_OFF_TO_LIN( context, context->SegEs, context->Edi ); + + GlobalMemoryStatus( &status ); + info->wPageSize = getpagesize(); + info->dwLargestFreeBlock = status.dwAvailVirtual; + info->dwMaxPagesAvailable = info->dwLargestFreeBlock / info->wPageSize; + info->dwMaxPagesLockable = info->dwMaxPagesAvailable; + info->dwTotalLinearSpace = status.dwTotalVirtual / info->wPageSize; + info->dwTotalUnlockedPages = info->dwTotalLinearSpace; + info->dwFreePages = info->dwMaxPagesAvailable; + info->dwTotalPages = info->dwTotalLinearSpace; + info->dwFreeLinearSpace = info->dwMaxPagesAvailable; + info->dwSwapFilePages = status.dwTotalPageFile / info->wPageSize; break; }