Saner lastdrive handling.
git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@183 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
99f39bebec
commit
2799b7b810
@ -12,6 +12,7 @@
|
||||
Bart: getdpb fixes (int 21/ah=32).
|
||||
fix carry handling in int 21/ah=5e.
|
||||
fix {get,set}_machine_name in network.c
|
||||
saner lastdrive handling
|
||||
+ Add Support for SHELLHIGH in config.sys
|
||||
2001 Mar 28 - Build 2023
|
||||
+ Fixes Bug fix release 2023b: dsk.c (reported by Nagy Daniel), inthndlr and
|
||||
|
@ -40,6 +40,9 @@ static BYTE *RcsId = "$Id$";
|
||||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.15 2001/03/30 22:27:42 bartoldeman
|
||||
* Saner lastdrive handling.
|
||||
*
|
||||
* Revision 1.14 2001/03/30 19:30:00 bartoldeman
|
||||
* Misc fixes and implementation of SHELLHIGH. See history.txt for details.
|
||||
*
|
||||
@ -339,7 +342,7 @@ INIT void PreConfig(void)
|
||||
+ Config.cfgFiles * sizeof(sft));
|
||||
|
||||
CDSp = (cdstbl FAR *)
|
||||
KernelAlloc(0x58 * (lastdrive));
|
||||
KernelAlloc(0x58 * lastdrive);
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("Preliminary f_node allocated at at 0x%p\n",f_nodes);
|
||||
@ -418,7 +421,7 @@ INIT void PostConfig(void)
|
||||
+ Config.cfgFiles * sizeof(sft));
|
||||
|
||||
CDSp = (cdstbl FAR *)
|
||||
KernelAlloc(0x58 * (lastdrive));
|
||||
KernelAlloc(0x58 * lastdrive);
|
||||
|
||||
#ifdef DEBUG
|
||||
|
||||
@ -458,7 +461,7 @@ INIT VOID configDone(VOID)
|
||||
#endif /* DEBUG */
|
||||
lastdrive = nblkdev;
|
||||
CDSp = (cdstbl FAR *)
|
||||
KernelAlloc(0x58 * (lastdrive ));
|
||||
KernelAlloc(0x58 * lastdrive);
|
||||
}
|
||||
first_mcb = FP_SEG(lpBase) + ((FP_OFF(lpBase) + 0x0f) >> 4);
|
||||
|
||||
|
@ -37,6 +37,9 @@ static BYTE *dosfnsRcsId = "$Id$";
|
||||
* /// Added SHARE support. 2000/09/04 Ron Cemer
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.13 2001/03/30 22:27:42 bartoldeman
|
||||
* Saner lastdrive handling.
|
||||
*
|
||||
* Revision 1.12 2001/03/30 19:30:06 bartoldeman
|
||||
* Misc fixes and implementation of SHELLHIGH. See history.txt for details.
|
||||
*
|
||||
@ -1117,7 +1120,7 @@ VOID DosGetFree(COUNT drive, COUNT FAR * spc, COUNT FAR * navc, COUNT FAR * bps,
|
||||
drive = (drive == 0 ? default_drive : drive - 1);
|
||||
|
||||
/* first check for valid drive */
|
||||
if (drive < 0 || drive > (lastdrive - 1))
|
||||
if (drive < 0 || drive >= lastdrive)
|
||||
{
|
||||
*spc = -1;
|
||||
return;
|
||||
@ -1166,7 +1169,7 @@ COUNT DosGetCuDir(COUNT drive, BYTE FAR * s)
|
||||
drive = (drive == 0 ? default_drive : drive - 1);
|
||||
|
||||
/* first check for valid drive */
|
||||
if (drive < 0 || drive > (lastdrive - 1)) {
|
||||
if (drive < 0 || drive >= lastdrive) {
|
||||
return DE_INVLDDRV;
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,9 @@ static BYTE *fatdirRcsId = "$Id$";
|
||||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.12 2001/03/30 22:27:42 bartoldeman
|
||||
* Saner lastdrive handling.
|
||||
*
|
||||
* Revision 1.11 2001/03/21 02:56:25 bartoldeman
|
||||
* See history.txt for changes. Bug fixes and HMA support are the main ones.
|
||||
*
|
||||
@ -202,7 +205,7 @@ struct f_node FAR *dir_open(BYTE FAR * dirname)
|
||||
{
|
||||
drive = default_drive;
|
||||
}
|
||||
if (drive > (lastdrive-1)) {
|
||||
if (drive >= lastdrive) {
|
||||
release_f_node(fnp);
|
||||
return NULL;
|
||||
}
|
||||
@ -618,7 +621,7 @@ COUNT dos_findfirst(UCOUNT attr, BYTE FAR * name)
|
||||
else
|
||||
nDrive = default_drive;
|
||||
|
||||
if (nDrive > (lastdrive -1)) {
|
||||
if (nDrive >= lastdrive) {
|
||||
return DE_INVLDDRV;
|
||||
}
|
||||
current_ldt = &CDSp->cds_table[nDrive];
|
||||
@ -799,7 +802,7 @@ COUNT dos_findnext(void)
|
||||
*/
|
||||
nDrive = dmp->dm_drive & 0x1f;
|
||||
|
||||
if (nDrive > (lastdrive -1)) {
|
||||
if (nDrive >= lastdrive) {
|
||||
return DE_INVLDDRV;
|
||||
}
|
||||
current_ldt = &CDSp->cds_table[nDrive];
|
||||
@ -825,7 +828,7 @@ COUNT dos_findnext(void)
|
||||
/* Force the fnode into read-write mode */
|
||||
fnp->f_mode = RDWR;
|
||||
|
||||
if (dmp->dm_drive > (lastdrive)) {
|
||||
if (dmp->dm_drive >= lastdrive) {
|
||||
return DE_INVLDDRV;
|
||||
}
|
||||
/* Select the default to help non-drive specified path */
|
||||
|
@ -35,6 +35,9 @@ static BYTE *RcsId = "$Id$";
|
||||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.8 2001/03/30 22:27:42 bartoldeman
|
||||
* Saner lastdrive handling.
|
||||
*
|
||||
* Revision 1.7 2001/03/21 02:56:26 bartoldeman
|
||||
* See history.txt for changes. Bug fixes and HMA support are the main ones.
|
||||
*
|
||||
@ -152,7 +155,7 @@ VOID FatGetDrvData(COUNT drive, COUNT FAR * spc, COUNT FAR * bps,
|
||||
printf("FGDD\n");
|
||||
|
||||
/* first check for valid drive */
|
||||
if ((drive < 0) || (drive > (lastdrive -1)) || (drive > NDEVS))
|
||||
if ((drive < 0) || (drive >= lastdrive) || (drive >= NDEVS))
|
||||
{
|
||||
*spc = -1;
|
||||
return;
|
||||
@ -235,7 +238,7 @@ WORD FcbParseFname(int wTestMode, BYTE FAR ** lpFileName, fcb FAR * lpFcb)
|
||||
if (Drive < 'A' || Drive > 'Z')
|
||||
return PARSE_RET_BADDRIVE;
|
||||
Drive -= ('A' - 1);
|
||||
if (Drive > (lastdrive -1))
|
||||
if (Drive >= lastdrive)
|
||||
return PARSE_RET_BADDRIVE;
|
||||
else
|
||||
lpFcb->fcb_drive = Drive;
|
||||
@ -804,7 +807,7 @@ BOOL FcbOpen(xfcb FAR * lpXfcb)
|
||||
return TRUE;
|
||||
}
|
||||
fbcopy((BYTE FAR *) & lpFcb->fcb_fname, (BYTE FAR *) & sftp->sft_name, FNAME_SIZE + FEXT_SIZE);
|
||||
if ((FcbDrive < 0) || (FcbDrive > (lastdrive -1))) {
|
||||
if ((FcbDrive < 0) || (FcbDrive >= lastdrive)) {
|
||||
return DE_INVLDDRV;
|
||||
}
|
||||
if (CDSp->cds_table[FcbDrive].cdsFlags & CDSNETWDRV) {
|
||||
@ -850,7 +853,7 @@ BOOL FcbDelete(xfcb FAR * lpXfcb)
|
||||
/* Build a traditional DOS file name */
|
||||
CommonFcbInit(lpXfcb, PriPathName, &FcbDrive);
|
||||
|
||||
if ((FcbDrive < 0) || (FcbDrive > (lastdrive -1))) {
|
||||
if ((FcbDrive < 0) || (FcbDrive >= lastdrive)) {
|
||||
return DE_INVLDDRV;
|
||||
}
|
||||
current_ldt = &CDSp->cds_table[FcbDrive];
|
||||
|
@ -36,6 +36,9 @@ BYTE *RcsId = "$Id$";
|
||||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.18 2001/03/30 22:27:42 bartoldeman
|
||||
* Saner lastdrive handling.
|
||||
*
|
||||
* Revision 1.17 2001/03/30 19:30:06 bartoldeman
|
||||
* Misc fixes and implementation of SHELLHIGH. See history.txt for details.
|
||||
*
|
||||
@ -631,7 +634,7 @@ dispatch:
|
||||
|
||||
/* Get default DPB */
|
||||
case 0x1f:
|
||||
if (default_drive <= (lastdrive -1))
|
||||
if (default_drive < lastdrive)
|
||||
{
|
||||
struct dpb FAR *dpb = (struct dpb FAR *)CDSp->cds_table[default_drive].cdsDpb;
|
||||
if (dpb == 0)
|
||||
@ -840,7 +843,7 @@ dispatch:
|
||||
/* Get DPB */
|
||||
case 0x32:
|
||||
r->DL = ( r->DL == 0 ? default_drive : r->DL - 1);
|
||||
if (r->DL <= (lastdrive - 1))
|
||||
if (r->DL < lastdrive)
|
||||
{
|
||||
struct dpb FAR *dpb = CDSp->cds_table[r->DL].cdsDpb;
|
||||
if (dpb == 0 ||
|
||||
@ -1517,13 +1520,13 @@ dispatch:
|
||||
switch (r->AL)
|
||||
{
|
||||
case 0x07:
|
||||
if (r->DL <= (lastdrive -1)) {
|
||||
if (r->DL < lastdrive) {
|
||||
CDSp->cds_table[r->DL].cdsFlags |= 0x100;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x08:
|
||||
if (r->DL <= (lastdrive -1)) {
|
||||
if (r->DL < lastdrive) {
|
||||
CDSp->cds_table[r->DL].cdsFlags &= ~0x100;
|
||||
}
|
||||
break;
|
||||
@ -1680,7 +1683,7 @@ dispatch:
|
||||
/* Get/Set Serial Number */
|
||||
case 0x69:
|
||||
rc = ( r->BL == 0 ? default_drive : r->BL - 1);
|
||||
if (rc <= (lastdrive -1))
|
||||
if (rc < lastdrive)
|
||||
{
|
||||
UWORD saveCX = r->CX;
|
||||
if (CDSp->cds_table[rc].cdsFlags & CDSNETWDRV) {
|
||||
@ -1881,7 +1884,7 @@ VOID int2526_handler(WORD mode, struct int25regs FAR * r)
|
||||
|
||||
drv = r->ax;
|
||||
|
||||
if (drv >= (lastdrive - 1))
|
||||
if (drv >= lastdrive)
|
||||
{
|
||||
r->ax = 0x202;
|
||||
r->flags |= FLG_CARRY;
|
||||
|
@ -35,6 +35,9 @@ static BYTE *RcsId = "$Id$";
|
||||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.7 2001/03/30 22:27:42 bartoldeman
|
||||
* Saner lastdrive handling.
|
||||
*
|
||||
* Revision 1.6 2000/06/21 18:16:46 jimtabor
|
||||
* Add UMB code, patch, and code fixes
|
||||
*
|
||||
@ -164,7 +167,7 @@ COUNT DosDevIOctl(iregs FAR * r, COUNT FAR * err)
|
||||
|
||||
dev = ( r->BL == 0 ? default_drive : r->BL - 1);
|
||||
|
||||
if (dev > (lastdrive -1))
|
||||
if (dev >= lastdrive)
|
||||
{
|
||||
*err = DE_INVLDDRV;
|
||||
return 0;
|
||||
|
@ -39,8 +39,8 @@ static BYTE *mainRcsId = "$Id$";
|
||||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.11 2001/03/30 20:11:14 bartoldeman
|
||||
* Truly got DOS=HIGH reporting for INT21/AX=0x3306 working now.
|
||||
* Revision 1.12 2001/03/30 22:27:42 bartoldeman
|
||||
* Saner lastdrive handling.
|
||||
*
|
||||
* Revision 1.10 2001/03/30 19:30:06 bartoldeman
|
||||
* Misc fixes and implementation of SHELLHIGH. See history.txt for details.
|
||||
@ -552,7 +552,7 @@ BOOL init_device(struct dhdr FAR * dhp, BYTE FAR * cmdLine, COUNT mode, COUNT r_
|
||||
pblk_devices->dpb_subunit = Index;
|
||||
pblk_devices->dpb_device = dhp;
|
||||
pblk_devices->dpb_flags = M_CHANGED;
|
||||
if ((CDSp != 0) && (nblkdev <= lastdrive))
|
||||
if ((CDSp != 0) && (nblkdev < lastdrive))
|
||||
{
|
||||
CDSp->cds_table[nblkdev].cdsDpb = pblk_devices;
|
||||
CDSp->cds_table[nblkdev].cdsFlags = CDSPHYSDRV;
|
||||
|
@ -31,6 +31,9 @@ static BYTE *mainRcsId = "$Id$";
|
||||
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.9 2001/03/30 22:27:42 bartoldeman
|
||||
* Saner lastdrive handling.
|
||||
*
|
||||
* Revision 1.8 2000/08/06 05:50:17 jimtabor
|
||||
* Add new files and update cvs with patches and changes
|
||||
*
|
||||
@ -220,7 +223,7 @@ COUNT get_verify_drive(char FAR *src)
|
||||
}
|
||||
else
|
||||
drive = default_drive;
|
||||
if ((drive < 0) || (drive > lastdrive)) {
|
||||
if ((drive < 0) || (drive >= lastdrive)) {
|
||||
drive = DE_INVLDDRV;
|
||||
}
|
||||
return drive;
|
||||
@ -255,7 +258,7 @@ COUNT truename(char FAR * src, char FAR * dest, COUNT t)
|
||||
{
|
||||
buf[0] = (src[0] | 0x20) + 'A' - 'a';
|
||||
|
||||
if (buf[0] > lastdrive + 'A')
|
||||
if (buf[0] >= lastdrive + 'A')
|
||||
return DE_PATHNOTFND;
|
||||
|
||||
src += 2;
|
||||
|
Loading…
Reference in New Issue
Block a user