From: <bar...@us...> - 2004-02-10 04:37:56
|
Update of /cvsroot/freedos/kernel/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21740 Modified Files: fcbfns.c proto.h Log Message: Don't call truename from FcbNameInit(). It was only necessary for "FcbRename", which can call it itself. This avoids yesterday's hack. Index: fcbfns.c =================================================================== RCS file: /cvsroot/freedos/kernel/kernel/fcbfns.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -d -r1.39 -r1.40 --- fcbfns.c 8 Feb 2004 20:58:09 -0000 1.39 +++ fcbfns.c 9 Feb 2004 19:32:21 -0000 1.40 @@ -43,7 +43,7 @@ STATIC fcb FAR *ExtFcbToFcb(xfcb FAR * lpExtFcb); STATIC fcb FAR *CommonFcbInit(xfcb FAR * lpExtFcb, BYTE * pszBuffer, COUNT * pCurDrive); -STATIC int FcbNameInit(fcb FAR * lpFcb, BYTE * pszBuffer, COUNT * pCurDrive); +STATIC void FcbNameInit(fcb FAR * lpFcb, BYTE * pszBuffer, COUNT * pCurDrive); STATIC void FcbNextRecord(fcb FAR * lpFcb); STATIC void FcbCalcRec(xfcb FAR * lpXfcb); @@ -400,20 +400,10 @@ /* Build a traditional DOS file name */ fcb FAR *lpFcb = CommonFcbInit(lpXfcb, SecPathName, &FcbDrive); - if (lpFcb == NULL) - return FCB_ERROR; - if ((flags & O_CREAT) && lpXfcb->xfcb_flag == 0xff) /* pass attribute without constraints (dangerous for directories) */ attr = lpXfcb->xfcb_attrib; - /* for c:/nul c:nul must be opened instead! - * this is a consequence of truename's funny behaviour: - * truename(c:nul) = c:/nul and truename(c:/nul) = c:\nul - * and for FCBs it's easiest to call truename twice - */ - if (SecPathName[2] == '/') - strcpy(&SecPathName[2], &SecPathName[3]); sft_idx = (short)DosOpenSft(SecPathName, flags, attr); if (sft_idx < 0) { @@ -459,17 +449,14 @@ sda_lpFcb = lpFcb = ExtFcbToFcb(lpExtFcb); /* Build a traditional DOS file name */ - if (FcbNameInit(lpFcb, pszBuffer, pCurDrive) < SUCCESS) - return NULL; - + FcbNameInit(lpFcb, pszBuffer, pCurDrive); /* and return the fcb pointer */ return lpFcb; } -int FcbNameInit(fcb FAR * lpFcb, BYTE * szBuffer, COUNT * pCurDrive) +STATIC void FcbNameInit(fcb FAR * lpFcb, BYTE * szBuffer, COUNT * pCurDrive) { - BYTE loc_szBuffer[2 + FNAME_SIZE + 1 + FEXT_SIZE + 1]; /* 'A:' + '.' + '\0' */ - BYTE *pszBuffer = loc_szBuffer; + BYTE *pszBuffer = szBuffer; /* Build a traditional DOS file name */ *pCurDrive = default_drive + 1; @@ -481,7 +468,6 @@ pszBuffer += 2; } ConvertName83ToNameSZ(pszBuffer, lpFcb->fcb_fname); - return truename(loc_szBuffer, szBuffer, CDS_MODE_CHECK_DEV_PATH|CDS_MODE_ALLOW_WILDCARDS); } UBYTE FcbDelete(xfcb FAR * lpXfcb) @@ -493,7 +479,7 @@ /* Build a traditional DOS file name */ fcb FAR *lpFcb = CommonFcbInit(lpXfcb, SecPathName, &FcbDrive); /* check for a device */ - if (lpFcb == NULL || IsDevice(SecPathName)) + if (IsDevice(SecPathName)) { result = FCB_ERROR; } @@ -535,7 +521,7 @@ lpRenameFcb = (rfcb FAR *) CommonFcbInit(lpXfcb, SecPathName, &FcbDrive); /* check for a device */ - if (lpRenameFcb == NULL || IsDevice(SecPathName)) + if (IsDevice(SecPathName)) { result = FCB_ERROR; } @@ -552,6 +538,8 @@ } else do { + /* 'A:' + '.' + '\0' */ + BYTE loc_szBuffer[2 + FNAME_SIZE + 1 + FEXT_SIZE + 1]; fcb LocalFcb; BYTE *pToName; const BYTE FAR *pFromPattern = Dmatch.dm_name; @@ -583,7 +571,8 @@ } /* now to build a dos name again */ LocalFcb.fcb_drive = FcbDrive; - result = FcbNameInit((fcb FAR *) & LocalFcb, SecPathName, &FcbDrive); + FcbNameInit(&LocalFcb, loc_szBuffer, &FcbDrive); + result = truename(loc_szBuffer, SecPathName, 0); if (result < SUCCESS || (!(result & IS_NETWORK) && (result & IS_DEVICE))) { result = FCB_ERROR; @@ -660,9 +649,6 @@ /* Next initialze local variables by moving them from the fcb */ lpFcb = CommonFcbInit(lpXfcb, SecPathName, &FcbDrive); - if (lpFcb == NULL) - return FCB_ERROR; - /* Reconstrct the dirmatch structure from the fcb - doesn't hurt for first */ Dmatch.dm_drive = lpFcb->fcb_sftno; @@ -682,9 +668,6 @@ lpDir += 7; } - /* for c:/nul c:nul must be opened instead! (see above) */ - if (SecPathName[2] == '/') - strcpy(&SecPathName[2], &SecPathName[3]); CritErrCode = -(First ? DosFindFirst(wAttr, SecPathName) : DosFindNext()); if (CritErrCode != SUCCESS) { Index: proto.h =================================================================== RCS file: /cvsroot/freedos/kernel/kernel/proto.h,v retrieving revision 1.47 retrieving revision 1.48 diff -u -d -r1.47 -r1.48 --- proto.h 27 Jan 2004 20:07:28 -0000 1.47 +++ proto.h 9 Feb 2004 19:32:22 -0000 1.48 @@ -214,7 +214,6 @@ UBYTE FcbRandomBlockIO(xfcb FAR * lpXfcb, UWORD *nRecords, int mode); UBYTE FcbRandomIO(xfcb FAR * lpXfcb, int mode); UBYTE FcbOpen(xfcb FAR * lpXfcb, unsigned flags); -int FcbNameInit(fcb FAR * lpFcb, BYTE * pszBuffer, COUNT * pCurDrive); UBYTE FcbDelete(xfcb FAR * lpXfcb); UBYTE FcbRename(xfcb FAR * lpXfcb); UBYTE FcbClose(xfcb FAR * lpXfcb); |