mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-21 21:04:43 +02:00
int21/ah=0x1b,0x1c should only change AL
Change prototype of DosGetFree so it returns AX (Arkady) Checking the return value for FFFF is enough to check for failure. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1008 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
7c861194f8
commit
7cd4f6c14b
@ -776,28 +776,28 @@ COUNT DosClose(COUNT hndl)
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
||||
UWORD * bps, UWORD * nc)
|
||||
UWORD DosGetFree(UBYTE drive, UWORD * navc, UWORD * bps, UWORD * nc)
|
||||
{
|
||||
/* navc==NULL means: called from FatGetDrvData, fcbfns.c */
|
||||
struct dpb FAR *dpbp;
|
||||
struct cds FAR *cdsp;
|
||||
COUNT rg[4];
|
||||
UWORD spc;
|
||||
|
||||
/* next - "log" in the drive */
|
||||
drive = (drive == 0 ? default_drive : drive - 1);
|
||||
|
||||
/* first check for valid drive */
|
||||
*spc = -1;
|
||||
spc = -1;
|
||||
cdsp = get_cds(drive);
|
||||
|
||||
if (cdsp == NULL)
|
||||
return FALSE;
|
||||
return spc;
|
||||
|
||||
if (cdsp->cdsFlags & CDSNETWDRV)
|
||||
{
|
||||
if (remote_getfree(cdsp, rg) != SUCCESS)
|
||||
return FALSE;
|
||||
return spc;
|
||||
|
||||
/* for int21/ah=1c:
|
||||
Undoc DOS says, its not supported for
|
||||
@ -806,21 +806,21 @@ BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
||||
the redirector can provide all info
|
||||
- Bart, 2002 Apr 1 */
|
||||
|
||||
spc = rg[0];
|
||||
if (navc != NULL)
|
||||
{
|
||||
*navc = (COUNT) rg[3];
|
||||
*spc &= 0xff; /* zero out media ID byte */
|
||||
spc &= 0xff; /* zero out media ID byte */
|
||||
}
|
||||
|
||||
*spc = (COUNT) rg[0];
|
||||
*nc = (COUNT) rg[1];
|
||||
*bps = (COUNT) rg[2];
|
||||
return TRUE;
|
||||
return spc;
|
||||
}
|
||||
|
||||
dpbp = cdsp->cdsDpb;
|
||||
if (dpbp == NULL)
|
||||
return FALSE;
|
||||
return spc;
|
||||
|
||||
if (navc == NULL)
|
||||
{
|
||||
@ -830,9 +830,9 @@ BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
||||
}
|
||||
|
||||
if (media_check(dpbp) < 0)
|
||||
return FALSE;
|
||||
return spc;
|
||||
/* get the data available from dpb */
|
||||
*spc = (dpbp->dpb_clsmask + 1);
|
||||
spc = (dpbp->dpb_clsmask + 1);
|
||||
*bps = dpbp->dpb_secsize;
|
||||
|
||||
/* now tell fs to give us free cluster */
|
||||
@ -850,7 +850,7 @@ BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
||||
while (ntotal > FAT_MAGIC16 && cluster_size < 0x8000)
|
||||
{
|
||||
cluster_size <<= 1;
|
||||
*spc <<= 1;
|
||||
spc <<= 1;
|
||||
ntotal >>= 1;
|
||||
nfree >>= 1;
|
||||
}
|
||||
@ -861,7 +861,7 @@ BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
||||
/* count */
|
||||
if (navc != NULL)
|
||||
*navc = nfree > FAT_MAGIC16 ? FAT_MAGIC16 : (UCOUNT) nfree;
|
||||
return TRUE;
|
||||
return spc;
|
||||
}
|
||||
#endif
|
||||
/* a passed navc of NULL means: skip free; see FatGetDrvData
|
||||
@ -869,15 +869,17 @@ BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
||||
if (navc != NULL)
|
||||
*navc = (COUNT) dos_free(dpbp);
|
||||
*nc = dpbp->dpb_size - 1;
|
||||
if (*spc > 64)
|
||||
if (spc > 64)
|
||||
{
|
||||
/* fake for 64k clusters do confuse some DOS programs, but let
|
||||
others work without overflowing */
|
||||
*spc >>= 1;
|
||||
*navc = ((unsigned)*navc < FAT_MAGIC16 / 2) ? ((unsigned)*navc << 1) : FAT_MAGIC16;
|
||||
spc >>= 1;
|
||||
if (navc != NULL)
|
||||
*navc = ((unsigned)*navc < FAT_MAGIC16 / 2) ?
|
||||
((unsigned)*navc << 1) : FAT_MAGIC16;
|
||||
*nc = ((unsigned)*nc < FAT_MAGIC16 / 2) ? ((unsigned)*nc << 1) : FAT_MAGIC16;
|
||||
}
|
||||
return TRUE;
|
||||
return spc;
|
||||
}
|
||||
|
||||
#ifdef WITHFAT32
|
||||
|
@ -52,19 +52,22 @@ STATIC void FcbCalcRec(xfcb FAR * lpXfcb);
|
||||
|
||||
static dmatch Dmatch;
|
||||
|
||||
BYTE FAR *FatGetDrvData(UBYTE drive, UWORD * spc, UWORD * bps, UWORD * nc)
|
||||
BYTE FAR *FatGetDrvData(UBYTE drive, UBYTE * pspc, UWORD * bps, UWORD * nc)
|
||||
{
|
||||
static BYTE mdb;
|
||||
UWORD spc;
|
||||
|
||||
/* get the data available from dpb */
|
||||
if (DosGetFree(drive, spc, NULL, bps, nc))
|
||||
spc = DosGetFree(drive, NULL, bps, nc);
|
||||
if (spc != 0xffff)
|
||||
{
|
||||
struct dpb FAR *dpbp = get_dpb(drive == 0 ? default_drive : drive - 1);
|
||||
/* Point to the media desctriptor for this drive */
|
||||
*pspc = (UBYTE)spc;
|
||||
if (dpbp == NULL)
|
||||
{
|
||||
mdb = *spc >> 8;
|
||||
*spc &= 0xff;
|
||||
mdb = spc >> 8;
|
||||
spc &= 0xff;
|
||||
return &mdb;
|
||||
}
|
||||
else
|
||||
|
@ -615,7 +615,7 @@ dispatch:
|
||||
{
|
||||
BYTE FAR *p;
|
||||
|
||||
p = FatGetDrvData(lr.DL, &lr.AX, &lr.CX, &lr.DX);
|
||||
p = FatGetDrvData(lr.DL, &lr.AL, &lr.CX, &lr.DX);
|
||||
lr.DS = FP_SEG(p);
|
||||
lr.BX = FP_OFF(p);
|
||||
}
|
||||
@ -795,7 +795,7 @@ dispatch:
|
||||
|
||||
/* Dos Get Disk Free Space */
|
||||
case 0x36:
|
||||
DosGetFree(lr.DL, &lr.AX, &lr.BX, &lr.CX, &lr.DX);
|
||||
lr.AX = DosGetFree(lr.DL, &lr.BX, &lr.CX, &lr.DX);
|
||||
break;
|
||||
|
||||
/* Undocumented Get/Set Switchar */
|
||||
|
@ -97,8 +97,7 @@ long DosOpenSft(char FAR * fname, unsigned flags, unsigned attrib);
|
||||
COUNT DosClose(COUNT hndl);
|
||||
COUNT DosCloseSft(int sft_idx, BOOL commitonly);
|
||||
#define DosCommit(hndl) DosCloseSft(get_sft_idx(hndl), TRUE)
|
||||
BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
||||
UWORD * bps, UWORD * nc);
|
||||
UWORD DosGetFree(UBYTE drive, UWORD * navc, UWORD * bps, UWORD * nc);
|
||||
COUNT DosGetCuDir(UBYTE drive, BYTE FAR * s);
|
||||
COUNT DosChangeDir(BYTE FAR * s);
|
||||
COUNT DosFindFirst(UCOUNT attr, BYTE FAR * name);
|
||||
@ -204,7 +203,7 @@ int DosCharInput(VOID);
|
||||
VOID DosDirectConsoleIO(iregs FAR * r);
|
||||
VOID DosCharOutput(COUNT c);
|
||||
VOID DosDisplayOutput(COUNT c);
|
||||
BYTE FAR *FatGetDrvData(UBYTE drive, UWORD * spc, UWORD * bps,
|
||||
BYTE FAR *FatGetDrvData(UBYTE drive, UBYTE * spc, UWORD * bps,
|
||||
UWORD * nc);
|
||||
UWORD FcbParseFname(UBYTE *wTestMode, const BYTE FAR *lpFileName, fcb FAR * lpFcb);
|
||||
const BYTE FAR *ParseSkipWh(const BYTE FAR * lpFileName);
|
||||
|
Loading…
x
Reference in New Issue
Block a user