merge from dev kernel, Jason Hood's patch for extended DPBs and Set Extended Error function
git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1120 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
e501067d7b
commit
c41380e578
@ -1978,6 +1978,16 @@ COUNT dos_setfattr(BYTE * name, UWORD attrp)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WITHFAT32
|
#ifdef WITHFAT32
|
||||||
|
VOID dpb16to32(struct dpb FAR *dpbp)
|
||||||
|
{
|
||||||
|
dpbp->dpb_xflags = 0;
|
||||||
|
dpbp->dpb_xfsinfosec = 0xffff;
|
||||||
|
dpbp->dpb_xbackupsec = 0xffff;
|
||||||
|
dpbp->dpb_xrootclst = 0;
|
||||||
|
dpbp->dpb_xdata = dpbp->dpb_data;
|
||||||
|
dpbp->dpb_xsize = dpbp->dpb_size;
|
||||||
|
}
|
||||||
|
|
||||||
VOID bpb_to_dpb(bpb FAR * bpbp, REG struct dpb FAR * dpbp, BOOL extended)
|
VOID bpb_to_dpb(bpb FAR * bpbp, REG struct dpb FAR * dpbp, BOOL extended)
|
||||||
#else
|
#else
|
||||||
VOID bpb_to_dpb(bpb FAR * bpbp, REG struct dpb FAR * dpbp)
|
VOID bpb_to_dpb(bpb FAR * bpbp, REG struct dpb FAR * dpbp)
|
||||||
@ -2037,12 +2047,7 @@ ckok:;
|
|||||||
dpbp->dpb_xcluster = UNKNCLUSTER;
|
dpbp->dpb_xcluster = UNKNCLUSTER;
|
||||||
dpbp->dpb_xnfreeclst = XUNKNCLSTFREE; /* number of free clusters */
|
dpbp->dpb_xnfreeclst = XUNKNCLSTFREE; /* number of free clusters */
|
||||||
|
|
||||||
dpbp->dpb_xflags = 0;
|
dpb16to32(dpbp);
|
||||||
dpbp->dpb_xfsinfosec = 0xffff;
|
|
||||||
dpbp->dpb_xbackupsec = 0xffff;
|
|
||||||
dpbp->dpb_xrootclst = 0;
|
|
||||||
dpbp->dpb_xdata = dpbp->dpb_data;
|
|
||||||
dpbp->dpb_xsize = dpbp->dpb_size;
|
|
||||||
|
|
||||||
if (ISFAT32(dpbp))
|
if (ISFAT32(dpbp))
|
||||||
{
|
{
|
||||||
|
@ -200,6 +200,17 @@ int int21_fat32(lregs *r)
|
|||||||
|
|
||||||
fmemcpy(&xddp->xdd_dpb, dpb, sizeof(struct dpb));
|
fmemcpy(&xddp->xdd_dpb, dpb, sizeof(struct dpb));
|
||||||
xddp->xdd_dpbsize = sizeof(struct dpb);
|
xddp->xdd_dpbsize = sizeof(struct dpb);
|
||||||
|
|
||||||
|
/* if it doesn't look like an extended DPB, fill in those fields */
|
||||||
|
if (!ISFAT32(dpb) && dpb->dpb_xsize != dpb->dpb_size)
|
||||||
|
{
|
||||||
|
xddp->xdd_dpb.dpb_nfreeclst_un.dpb_nfreeclst_st.dpb_nfreeclst_hi =
|
||||||
|
(dpb->dpb_nfreeclst == 0xFFFF ? 0xFFFF : 0);
|
||||||
|
dpb16to32(&xddp->xdd_dpb);
|
||||||
|
xddp->xdd_dpb.dpb_xfatsize = dpb->dpb_fatsize;
|
||||||
|
xddp->xdd_dpb.dpb_xcluster = (dpb->dpb_cluster == 0xFFFF ?
|
||||||
|
0xFFFFFFFFuL : dpb->dpb_cluster);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Get extended free drive space */
|
/* Get extended free drive space */
|
||||||
@ -1215,6 +1226,20 @@ dispatch:
|
|||||||
goto error_exit;
|
goto error_exit;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* Set Extended Error */
|
||||||
|
case 0x0a:
|
||||||
|
{
|
||||||
|
lregs er;
|
||||||
|
fmemcpy(&er, FP_DS_DX, sizeof(er));
|
||||||
|
CritErrCode = er.AX;
|
||||||
|
CritErrDev = MK_FP(er.ES, er.DI);
|
||||||
|
CritErrLocus = er.CH;
|
||||||
|
CritErrClass = er.BH;
|
||||||
|
CritErrAction = er.BL;
|
||||||
|
CLEAR_CARRY_FLAG();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
CritErrCode = SUCCESS;
|
CritErrCode = SUCCESS;
|
||||||
goto error_invalid;
|
goto error_invalid;
|
||||||
|
@ -173,6 +173,7 @@ COUNT dos_write(COUNT fd, const VOID FAR * buffer, UCOUNT count);
|
|||||||
LONG dos_lseek(COUNT fd, LONG foffset, COUNT origin);
|
LONG dos_lseek(COUNT fd, LONG foffset, COUNT origin);
|
||||||
CLUSTER dos_free(struct dpb FAR * dpbp);
|
CLUSTER dos_free(struct dpb FAR * dpbp);
|
||||||
BOOL dir_exists(char * path);
|
BOOL dir_exists(char * path);
|
||||||
|
VOID dpb16to32(struct dpb FAR *dpbp);
|
||||||
|
|
||||||
VOID trim_path(BYTE FAR * s);
|
VOID trim_path(BYTE FAR * s);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user