mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-21 12:54:30 +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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
UWORD DosGetFree(UBYTE drive, UWORD * navc, UWORD * bps, UWORD * nc)
|
||||||
UWORD * bps, UWORD * nc)
|
|
||||||
{
|
{
|
||||||
/* navc==NULL means: called from FatGetDrvData, fcbfns.c */
|
/* navc==NULL means: called from FatGetDrvData, fcbfns.c */
|
||||||
struct dpb FAR *dpbp;
|
struct dpb FAR *dpbp;
|
||||||
struct cds FAR *cdsp;
|
struct cds FAR *cdsp;
|
||||||
COUNT rg[4];
|
COUNT rg[4];
|
||||||
|
UWORD spc;
|
||||||
|
|
||||||
/* next - "log" in the drive */
|
/* next - "log" in the drive */
|
||||||
drive = (drive == 0 ? default_drive : drive - 1);
|
drive = (drive == 0 ? default_drive : drive - 1);
|
||||||
|
|
||||||
/* first check for valid drive */
|
/* first check for valid drive */
|
||||||
*spc = -1;
|
spc = -1;
|
||||||
cdsp = get_cds(drive);
|
cdsp = get_cds(drive);
|
||||||
|
|
||||||
if (cdsp == NULL)
|
if (cdsp == NULL)
|
||||||
return FALSE;
|
return spc;
|
||||||
|
|
||||||
if (cdsp->cdsFlags & CDSNETWDRV)
|
if (cdsp->cdsFlags & CDSNETWDRV)
|
||||||
{
|
{
|
||||||
if (remote_getfree(cdsp, rg) != SUCCESS)
|
if (remote_getfree(cdsp, rg) != SUCCESS)
|
||||||
return FALSE;
|
return spc;
|
||||||
|
|
||||||
/* for int21/ah=1c:
|
/* for int21/ah=1c:
|
||||||
Undoc DOS says, its not supported for
|
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
|
the redirector can provide all info
|
||||||
- Bart, 2002 Apr 1 */
|
- Bart, 2002 Apr 1 */
|
||||||
|
|
||||||
|
spc = rg[0];
|
||||||
if (navc != NULL)
|
if (navc != NULL)
|
||||||
{
|
{
|
||||||
*navc = (COUNT) rg[3];
|
*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];
|
*nc = (COUNT) rg[1];
|
||||||
*bps = (COUNT) rg[2];
|
*bps = (COUNT) rg[2];
|
||||||
return TRUE;
|
return spc;
|
||||||
}
|
}
|
||||||
|
|
||||||
dpbp = cdsp->cdsDpb;
|
dpbp = cdsp->cdsDpb;
|
||||||
if (dpbp == NULL)
|
if (dpbp == NULL)
|
||||||
return FALSE;
|
return spc;
|
||||||
|
|
||||||
if (navc == NULL)
|
if (navc == NULL)
|
||||||
{
|
{
|
||||||
@ -830,9 +830,9 @@ BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (media_check(dpbp) < 0)
|
if (media_check(dpbp) < 0)
|
||||||
return FALSE;
|
return spc;
|
||||||
/* get the data available from dpb */
|
/* get the data available from dpb */
|
||||||
*spc = (dpbp->dpb_clsmask + 1);
|
spc = (dpbp->dpb_clsmask + 1);
|
||||||
*bps = dpbp->dpb_secsize;
|
*bps = dpbp->dpb_secsize;
|
||||||
|
|
||||||
/* now tell fs to give us free cluster */
|
/* 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)
|
while (ntotal > FAT_MAGIC16 && cluster_size < 0x8000)
|
||||||
{
|
{
|
||||||
cluster_size <<= 1;
|
cluster_size <<= 1;
|
||||||
*spc <<= 1;
|
spc <<= 1;
|
||||||
ntotal >>= 1;
|
ntotal >>= 1;
|
||||||
nfree >>= 1;
|
nfree >>= 1;
|
||||||
}
|
}
|
||||||
@ -861,7 +861,7 @@ BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
|||||||
/* count */
|
/* count */
|
||||||
if (navc != NULL)
|
if (navc != NULL)
|
||||||
*navc = nfree > FAT_MAGIC16 ? FAT_MAGIC16 : (UCOUNT) nfree;
|
*navc = nfree > FAT_MAGIC16 ? FAT_MAGIC16 : (UCOUNT) nfree;
|
||||||
return TRUE;
|
return spc;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* a passed navc of NULL means: skip free; see FatGetDrvData
|
/* 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)
|
if (navc != NULL)
|
||||||
*navc = (COUNT) dos_free(dpbp);
|
*navc = (COUNT) dos_free(dpbp);
|
||||||
*nc = dpbp->dpb_size - 1;
|
*nc = dpbp->dpb_size - 1;
|
||||||
if (*spc > 64)
|
if (spc > 64)
|
||||||
{
|
{
|
||||||
/* fake for 64k clusters do confuse some DOS programs, but let
|
/* fake for 64k clusters do confuse some DOS programs, but let
|
||||||
others work without overflowing */
|
others work without overflowing */
|
||||||
*spc >>= 1;
|
spc >>= 1;
|
||||||
*navc = ((unsigned)*navc < FAT_MAGIC16 / 2) ? ((unsigned)*navc << 1) : FAT_MAGIC16;
|
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;
|
*nc = ((unsigned)*nc < FAT_MAGIC16 / 2) ? ((unsigned)*nc << 1) : FAT_MAGIC16;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return spc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WITHFAT32
|
#ifdef WITHFAT32
|
||||||
|
@ -52,19 +52,22 @@ STATIC void FcbCalcRec(xfcb FAR * lpXfcb);
|
|||||||
|
|
||||||
static dmatch Dmatch;
|
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;
|
static BYTE mdb;
|
||||||
|
UWORD spc;
|
||||||
|
|
||||||
/* get the data available from dpb */
|
/* 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);
|
struct dpb FAR *dpbp = get_dpb(drive == 0 ? default_drive : drive - 1);
|
||||||
/* Point to the media desctriptor for this drive */
|
/* Point to the media desctriptor for this drive */
|
||||||
|
*pspc = (UBYTE)spc;
|
||||||
if (dpbp == NULL)
|
if (dpbp == NULL)
|
||||||
{
|
{
|
||||||
mdb = *spc >> 8;
|
mdb = spc >> 8;
|
||||||
*spc &= 0xff;
|
spc &= 0xff;
|
||||||
return &mdb;
|
return &mdb;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -615,7 +615,7 @@ dispatch:
|
|||||||
{
|
{
|
||||||
BYTE FAR *p;
|
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.DS = FP_SEG(p);
|
||||||
lr.BX = FP_OFF(p);
|
lr.BX = FP_OFF(p);
|
||||||
}
|
}
|
||||||
@ -795,7 +795,7 @@ dispatch:
|
|||||||
|
|
||||||
/* Dos Get Disk Free Space */
|
/* Dos Get Disk Free Space */
|
||||||
case 0x36:
|
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;
|
break;
|
||||||
|
|
||||||
/* Undocumented Get/Set Switchar */
|
/* Undocumented Get/Set Switchar */
|
||||||
|
@ -97,8 +97,7 @@ long DosOpenSft(char FAR * fname, unsigned flags, unsigned attrib);
|
|||||||
COUNT DosClose(COUNT hndl);
|
COUNT DosClose(COUNT hndl);
|
||||||
COUNT DosCloseSft(int sft_idx, BOOL commitonly);
|
COUNT DosCloseSft(int sft_idx, BOOL commitonly);
|
||||||
#define DosCommit(hndl) DosCloseSft(get_sft_idx(hndl), TRUE)
|
#define DosCommit(hndl) DosCloseSft(get_sft_idx(hndl), TRUE)
|
||||||
BOOL DosGetFree(UBYTE drive, UWORD * spc, UWORD * navc,
|
UWORD DosGetFree(UBYTE drive, UWORD * navc, UWORD * bps, UWORD * nc);
|
||||||
UWORD * bps, UWORD * nc);
|
|
||||||
COUNT DosGetCuDir(UBYTE drive, BYTE FAR * s);
|
COUNT DosGetCuDir(UBYTE drive, BYTE FAR * s);
|
||||||
COUNT DosChangeDir(BYTE FAR * s);
|
COUNT DosChangeDir(BYTE FAR * s);
|
||||||
COUNT DosFindFirst(UCOUNT attr, BYTE FAR * name);
|
COUNT DosFindFirst(UCOUNT attr, BYTE FAR * name);
|
||||||
@ -204,7 +203,7 @@ int DosCharInput(VOID);
|
|||||||
VOID DosDirectConsoleIO(iregs FAR * r);
|
VOID DosDirectConsoleIO(iregs FAR * r);
|
||||||
VOID DosCharOutput(COUNT c);
|
VOID DosCharOutput(COUNT c);
|
||||||
VOID DosDisplayOutput(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 * nc);
|
||||||
UWORD FcbParseFname(UBYTE *wTestMode, const BYTE FAR *lpFileName, fcb FAR * lpFcb);
|
UWORD FcbParseFname(UBYTE *wTestMode, const BYTE FAR *lpFileName, fcb FAR * lpFcb);
|
||||||
const BYTE FAR *ParseSkipWh(const BYTE FAR * lpFileName);
|
const BYTE FAR *ParseSkipWh(const BYTE FAR * lpFileName);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user