mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-23 13:54:30 +02:00
FCB (int 21h func 29h): should keep parsing name even if drive letter invalid
This commit is contained in:
parent
0e6d90cf82
commit
031f17068a
@ -90,7 +90,7 @@ BYTE FAR *FatGetDrvData(UBYTE drive, UBYTE * pspc, UWORD * bps, UWORD * nc)
|
|||||||
#ifndef IPL
|
#ifndef IPL
|
||||||
UWORD FcbParseFname(UBYTE *wTestMode, const BYTE FAR * lpFileName, fcb FAR * lpFcb)
|
UWORD FcbParseFname(UBYTE *wTestMode, const BYTE FAR * lpFileName, fcb FAR * lpFcb)
|
||||||
{
|
{
|
||||||
WORD wRetCodeName = FALSE, wRetCodeExt = FALSE;
|
WORD wRetCodeDrive = FALSE, wRetCodeName = FALSE, wRetCodeExt = FALSE;
|
||||||
|
|
||||||
/* pjv -- ExtFcbToFcb? */
|
/* pjv -- ExtFcbToFcb? */
|
||||||
|
|
||||||
@ -105,18 +105,18 @@ UWORD FcbParseFname(UBYTE *wTestMode, const BYTE FAR * lpFileName, fcb FAR * lpF
|
|||||||
lpFileName = ParseSkipWh(lpFileName);
|
lpFileName = ParseSkipWh(lpFileName);
|
||||||
|
|
||||||
/* Now check for drive specification */
|
/* Now check for drive specification */
|
||||||
/* If drive specified, set to it (when valid) otherwise */
|
/* If drive specified, set to it otherwise */
|
||||||
/* set to default drive unless leave as-is requested */
|
/* set to default drive unless leave as-is requested */
|
||||||
|
|
||||||
|
/* Undocumented behavior: should keep parsing even if drive */
|
||||||
|
/* specification is invalid -- tkchia 20220715 */
|
||||||
if (*(lpFileName + 1) == ':')
|
if (*(lpFileName + 1) == ':')
|
||||||
{
|
{
|
||||||
/* non-portable construct to be changed */
|
/* non-portable construct to be changed */
|
||||||
REG UBYTE Drive = DosUpFChar(*lpFileName) - 'A';
|
REG UBYTE Drive = DosUpFChar(*lpFileName) - 'A';
|
||||||
|
|
||||||
if (get_cds(Drive) == NULL)
|
if (get_cds(Drive) == NULL)
|
||||||
{
|
wRetCodeDrive = TRUE;
|
||||||
*wTestMode = PARSE_RET_BADDRIVE;
|
|
||||||
return FP_OFF(lpFileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
lpFcb->fcb_drive = Drive + 1;
|
lpFcb->fcb_drive = Drive + 1;
|
||||||
lpFileName += 2;
|
lpFileName += 2;
|
||||||
@ -163,7 +163,12 @@ UWORD FcbParseFname(UBYTE *wTestMode, const BYTE FAR * lpFileName, fcb FAR * lpF
|
|||||||
GetNameField(++lpFileName, (BYTE FAR *) lpFcb->fcb_fext,
|
GetNameField(++lpFileName, (BYTE FAR *) lpFcb->fcb_fext,
|
||||||
FEXT_SIZE, (BOOL *) & wRetCodeExt);
|
FEXT_SIZE, (BOOL *) & wRetCodeExt);
|
||||||
|
|
||||||
*wTestMode = (wRetCodeName | wRetCodeExt) ? PARSE_RET_WILD : PARSE_RET_NOWILD;
|
if (wRetCodeDrive)
|
||||||
|
*wTestMode = PARSE_RET_BADDRIVE;
|
||||||
|
else if (wRetCodeName | wRetCodeExt)
|
||||||
|
*wTestMode = PARSE_RET_WILD;
|
||||||
|
else
|
||||||
|
*wTestMode = PARSE_RET_NOWILD;
|
||||||
return FP_OFF(lpFileName);
|
return FP_OFF(lpFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user