From b10d86bcaab44e4d996a4483d05f142165b6cc3b Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Mon, 1 Jun 2009 14:55:11 +0000 Subject: [PATCH] Introduce get_cds1 to merge common code that checks for 0=default_drive,1=A,etc. Make load_transfer() static. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1414 6ac86273-5f31-0410-b378-82cca8765d1b --- kernel/dosfns.c | 17 +++++++++++------ kernel/proto.h | 1 + kernel/task.c | 15 +++------------ 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/kernel/dosfns.c b/kernel/dosfns.c index a61e192..dd0390f 100644 --- a/kernel/dosfns.c +++ b/kernel/dosfns.c @@ -113,13 +113,21 @@ struct cds FAR *get_cds(unsigned drive) return cdsp; } +/* same, but on input drv is 0 for default or 1=A, 2=B, etc. */ +struct cds FAR *get_cds1(unsigned drv) +{ + if (drv-- == 0) /* get default drive or convert to 0 = A:, 1 = B:, ... */ + drv = default_drive; + return get_cds(drv); +} + #ifdef WITHFAT32 struct dpb FAR * GetDriveDPB(UBYTE drive, COUNT * rc) { struct dpb FAR *dpb; struct cds FAR *cdsp; - cdsp = get_cds(drive == 0 ? default_drive : drive - 1); + cdsp = get_cds1(drive); if (cdsp == NULL) { @@ -736,12 +744,9 @@ UWORD DosGetFree(UBYTE drive, UWORD * navc, UWORD * bps, UWORD * nc) COUNT rg[4]; UWORD spc; - /* next - "log" in the drive */ - drive = (drive == 0 ? default_drive : drive - 1); - /* first check for valid drive */ spc = -1; - cdsp = get_cds(drive); + cdsp = get_cds1(drive); if (cdsp == NULL) return spc; @@ -897,7 +902,7 @@ COUNT DosGetCuDir(UBYTE drive, BYTE FAR * s) /* next - "log" in the drive */ /* first check for valid drive */ - cdsp = get_cds(drive == 0 ? default_drive : drive - 1); + cdsp = get_cds1(drive); if (cdsp == NULL) return DE_INVLDDRV; diff --git a/kernel/proto.h b/kernel/proto.h index fcf96d5..a6315aa 100644 --- a/kernel/proto.h +++ b/kernel/proto.h @@ -118,6 +118,7 @@ int idx_to_sft_(int SftIndex); sft FAR *idx_to_sft(int SftIndex); int get_sft_idx(UCOUNT hndl); struct cds FAR *get_cds(unsigned dsk); +struct cds FAR *get_cds1(unsigned dsk); COUNT DosTruename(const char FAR * src, char FAR * dest); /* dosidle.asm */ diff --git a/kernel/task.c b/kernel/task.c index 02bc2af..3391679 100644 --- a/kernel/task.c +++ b/kernel/task.c @@ -233,15 +233,6 @@ void child_psp(seg para, seg cur_psp, int psize) p->ps_cmd.ctBuffer[0] = 0xd; /* command tail */ } -STATIC UBYTE chkdrv(unsigned drive) /* from FCB: 0 = default, 1 = A:, ... */ -{ - if (drive) - drive--; /* 0 = A:, 1 = B:, ... */ - else - drive = default_drive; - return get_cds(drive) ? 0 : 0xff; /* return 0 if drive is valid, else 0xff */ -} - STATIC UWORD patchPSP(UWORD pspseg, UWORD envseg, exec_blk FAR * exb, BYTE FAR * fnam) { @@ -295,11 +286,11 @@ set_name: pspmcb->m_name[i] = '\0'; /* return value: AX value to be passed based on FCB values */ - return chkdrv(psp->ps_fcb1.fcb_drive) | - (chkdrv(psp->ps_fcb2.fcb_drive) << 8); + return (get_cds1(psp->ps_fcb1.fcb_drive) ? 0 : 0xff) | + (get_cds1(psp->ps_fcb2.fcb_drive) ? 0 : 0xff00); } -int load_transfer(UWORD ds, exec_blk *exp, UWORD fcbcode, COUNT mode) +STATIC int load_transfer(UWORD ds, exec_blk *exp, UWORD fcbcode, COUNT mode) { psp FAR *p = MK_FP(ds, 0); psp FAR *q = MK_FP(cu_psp, 0);