From e43272326e11e3977b1e0de2ccfcc155cde76255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Thu, 3 Apr 2008 18:28:19 +0000 Subject: [PATCH] fix undocumented error handling of dos freesize check for non-present floppy drives Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3139 --- src/dos/dos.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/dos/dos.cpp b/src/dos/dos.cpp index 44f9bf52..700ba82c 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.109 2008-03-12 17:45:39 c2woody Exp $ */ +/* $Id: dos.cpp,v 1.110 2008-04-03 18:28:19 c2woody Exp $ */ #include #include @@ -435,13 +435,22 @@ static Bitu DOS_21Handler(void) { { Bit16u bytes,clusters,free; Bit8u sectors; - if(DOS_GetFreeDiskSpace(reg_dl,&bytes,§ors,&clusters,&free)) { + if (DOS_GetFreeDiskSpace(reg_dl,&bytes,§ors,&clusters,&free)) { reg_ax=sectors; reg_bx=free; reg_cx=bytes; reg_dx=clusters; } else { - reg_ax=0xffff; + Bit8u drive=reg_dl; + if (drive==0) drive=DOS_GetDefaultDrive(); + else drive--; + if (drive<2) { + // floppy oddity, non-present drives don't fail with the + // invalid drive error + CALLBACK_SCF(true); + } else { + reg_ax=0xffff; // invalid drive specified + } } } break;