From 37084d608420f892e20ba07e30b3ff2587675614 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Wed, 12 Jan 2005 12:44:48 +0000 Subject: [PATCH] Allocate memory changes handle only on succes. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2096 --- src/ints/ems.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/ints/ems.cpp b/src/ints/ems.cpp index 8389567a..3a3aa8ea 100644 --- a/src/ints/ems.cpp +++ b/src/ints/ems.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: ems.cpp,v 1.36 2004-10-23 15:15:06 qbix79 Exp $ */ +/* $Id: ems.cpp,v 1.37 2005-01-12 12:44:48 qbix79 Exp $ */ #include #include @@ -119,20 +119,22 @@ static bool INLINE ValidHandle(Bit16u handle) { return true; } -static Bit8u EMM_AllocateMemory(Bit16u pages,Bit16u & handle) { +static Bit8u EMM_AllocateMemory(Bit16u pages,Bit16u & dhandle) { /* Check for 0 page allocation */ if (!pages) return EMM_ZERO_PAGES; /* Check for enough free pages */ - if ((MEM_FreeTotal()/4)=EMM_MAX_HANDLES) {handle=NULL_HANDLE;return EMM_OUT_OF_HANDLES;} + while (emm_handles[handle].pages != NULL_HANDLE) { + if (++handle >= EMM_MAX_HANDLES) {return EMM_OUT_OF_HANDLES;} } - MemHandle mem=MEM_AllocatePages(pages*4,false); + MemHandle mem = MEM_AllocatePages(pages*4,false); if (!mem) E_Exit("EMS:Memory allocation failure"); - emm_handles[handle].pages=pages; - emm_handles[handle].mem=mem; + emm_handles[handle].pages = pages; + emm_handles[handle].mem = mem; + /* Change handle only if there is no error. */ + dhandle = handle; return EMM_NO_ERROR; }