From 96bf0e28d6131533c9b520b43ffe743c64f2d060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Thu, 24 Nov 2005 17:05:22 +0000 Subject: [PATCH] add error handling for DOS_SetMemAllocStrategy Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2385 --- include/dos_inc.h | 4 ++-- src/dos/dos.cpp | 8 ++++++-- src/dos/dos_memory.cpp | 19 +++++++++++-------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/include/dos_inc.h b/include/dos_inc.h index 6cf48b8c..997807dd 100644 --- a/include/dos_inc.h +++ b/include/dos_inc.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_inc.h,v 1.57 2005-11-07 21:08:11 c2woody Exp $ */ +/* $Id: dos_inc.h,v 1.58 2005-11-24 17:05:19 c2woody Exp $ */ #ifndef DOSBOX_DOS_INC_H #define DOSBOX_DOS_INC_H @@ -156,7 +156,7 @@ bool DOS_ResizeMemory(Bit16u segment,Bit16u * blocks); bool DOS_FreeMemory(Bit16u segment); void DOS_FreeProcessMemory(Bit16u pspseg); Bit16u DOS_GetMemory(Bit16u pages); -void DOS_SetMemAllocStrategy(Bit16u strat); +bool DOS_SetMemAllocStrategy(Bit16u strat); Bit16u DOS_GetMemAllocStrategy(void); void DOS_BuildUMBChain(const char* use_umbs,bool ems_active); bool DOS_LinkUMBsToMemChain(Bit16u linkstate); diff --git a/src/dos/dos.cpp b/src/dos/dos.cpp index e16898fe..32d8f693 100644 --- a/src/dos/dos.cpp +++ b/src/dos/dos.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos.cpp,v 1.89 2005-11-17 13:16:34 qbix79 Exp $ */ +/* $Id: dos.cpp,v 1.90 2005-11-24 17:05:22 c2woody Exp $ */ #include #include @@ -720,7 +720,11 @@ static Bitu DOS_21Handler(void) { reg_ax=DOS_GetMemAllocStrategy(); break; case 1: /* Set Strategy */ - DOS_SetMemAllocStrategy(reg_bx); + if (DOS_SetMemAllocStrategy(reg_bx)) CALLBACK_SCF(false); + else { + reg_ax=1; + CALLBACK_SCF(true); + } break; case 2: /* Get UMB Link Status */ reg_al=dos_infoblock.GetUMBChainState()&1; diff --git a/src/dos/dos_memory.cpp b/src/dos/dos_memory.cpp index ebd1ab01..ed30d13b 100644 --- a/src/dos/dos_memory.cpp +++ b/src/dos/dos_memory.cpp @@ -68,17 +68,20 @@ void DOS_FreeProcessMemory(Bit16u pspseg) { } else if (umb_start!=0xffff) LOG(LOG_DOSMISC,LOG_ERROR)("Corrupt UMB chain: %x",umb_start); DOS_CompressMemory(); -}; +} -Bit16u DOS_GetMemAllocStrategy() -{ +Bit16u DOS_GetMemAllocStrategy() { return memAllocStrategy; -}; +} -void DOS_SetMemAllocStrategy(Bit16u strat) -{ - memAllocStrategy = strat; -}; +bool DOS_SetMemAllocStrategy(Bit16u strat) { + if ((strat&0x3f)<3) { + memAllocStrategy = strat; + return true; + } + /* otherwise an invalid allocation strategy was specified */ + return false; +} bool DOS_AllocateMemory(Bit16u * segment,Bit16u * blocks) { DOS_CompressMemory();