Eliminate the fnode F_DDIR flag which has no SFT equivalent:

f_sft_idx==0xff can do the same. rwblock() is never called for directories
so the checks could be removed.


git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1419 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Bart Oldeman 2009-06-04 23:40:17 +00:00
parent 60e8c56f91
commit fedf951beb
3 changed files with 12 additions and 18 deletions

View File

@ -54,7 +54,6 @@ struct f_node {
};
#define F_DMOD 0x40 /* directory has been modified */
#define F_DDIR 2 /* fnode is assigned to dir */
#define F_DDATE 0x4000 /* date set using setdate */
typedef struct f_node *f_node_ptr;

View File

@ -42,7 +42,7 @@ static BYTE *fatdirRcsId =
VOID dir_init_fnode(f_node_ptr fnp, CLUSTER dirstart)
{
/* reset the directory flags */
fnp->f_flags = F_DDIR;
fnp->f_sft_idx = 0xff;
fnp->f_diroff = 0;
fnp->f_offset = 0l;
fnp->f_cluster_offset = 0;
@ -237,9 +237,6 @@ BOOL dir_write_update(REG f_node_ptr fnp, BOOL update)
struct buffer FAR *bp;
UBYTE FAR *vp;
if (!(fnp->f_flags & F_DDIR))
return FALSE;
/* Update the entry if it was modified by a write or create... */
if (fnp->f_flags & (F_DMOD|F_DDATE))
{

View File

@ -196,12 +196,13 @@ int dos_open(char *path, unsigned flags, unsigned attrib, int fd)
if (status != S_OPENED)
{
init_direntry(&fnp->f_dir, attrib, FREE, fcbname);
fnp->f_flags = F_DMOD | F_DDIR;
fnp->f_flags = F_DMOD;
if (!dir_write(fnp))
return DE_ACCESS;
}
/* Now change to file */
fnp->f_sft_idx = fd;
fnp->f_offset = 0l;
if (status != S_OPENED)
@ -247,7 +248,7 @@ COUNT dos_close(COUNT fd)
merge_file_changes(fnp, FALSE); /* /// Added - Ron Cemer */
}
fnp->f_flags |= F_DDIR;
fnp->f_sft_idx = 0xff;
dir_write_update(fnp, TRUE);
return SUCCESS;
@ -592,7 +593,7 @@ COUNT dos_rename(BYTE * path1, BYTE * path2, int attrib)
/* The directory has been modified, so set the bit before */
/* closing it, allowing it to be updated. */
fnp1->f_flags = F_DMOD | F_DDIR;
fnp1->f_flags = F_DMOD;
/* Ok, so we can delete this one. Save the file info. */
*(fnp1->f_dir.dir_name) = DELETED;
@ -605,7 +606,7 @@ COUNT dos_rename(BYTE * path1, BYTE * path2, int attrib)
/* The directory has been modified, so set the bit before */
/* closing it, allowing it to be updated. */
fnp2->f_flags = F_DMOD | F_DDIR;
fnp2->f_flags = F_DMOD;
dir_write(fnp2);
/* SUCCESSful completion, return it */
@ -862,7 +863,7 @@ COUNT dos_mkdir(BYTE * dir)
init_direntry(&fnp->f_dir, D_DIR, free_fat, fcbname);
fnp->f_flags = F_DMOD | F_DDIR;
fnp->f_flags = F_DMOD;
fnp->f_offset = 0l;
@ -1017,7 +1018,7 @@ STATIC COUNT extend_dir(f_node_ptr fnp)
/* Description.
* Finds the cluster which contains byte at the fnp->f_offset offset and
* stores its number to the fnp->f_cluster. The search begins from the start of
* a file or a directory depending whether fnp->f_ddir is FALSE or TRUE
* a file or a directory depending on whether the SFT index is valid
* and continues through the FAT chain until the target cluster is found.
* The mode can have only XFR_READ or XFR_WRITE values.
* In the XFR_WRITE mode map_cluster extends the FAT chain by creating
@ -1069,7 +1070,7 @@ COUNT map_cluster(REG f_node_ptr fnp, COUNT mode)
/* If seek is to earlier in file than current position, */
/* we have to follow chain from the beginning again... */
/* Set internal index and cluster size. */
fnp->f_cluster = (fnp->f_flags & F_DDIR) ? fnp->f_dirstart :
fnp->f_cluster = fnp->f_sft_idx == 0xff ? fnp->f_dirstart :
getdstart(fnp->f_dpb, &fnp->f_dir);
fnp->f_cluster_offset = 0;
}
@ -1332,8 +1333,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
unsigned sector, boff;
/* Do an EOF test and return whatever was transferred */
/* but only for regular files. */
if (mode == XFR_READ && !(fnp->f_flags & F_DDIR) && (fnp->f_offset >= fnp->f_dir.dir_size))
if (mode == XFR_READ && fnp->f_offset >= fnp->f_dir.dir_size)
{
fnode_to_sft(fnp);
return ret_cnt;
@ -1383,8 +1383,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
/* see comments above */
if (!(fnp->f_flags & F_DDIR) && /* don't experiment with directories yet */
boff == 0) /* complete sectors only */
if (boff == 0) /* complete sectors only */
{
static ULONG startoffset;
UCOUNT sectors_to_xfer, sectors_wanted;
@ -1473,7 +1472,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
/* Then compare to what is left, since we can transfer */
/* a maximum of what is left. */
xfr_cnt = min(to_xfer, secsize - boff);
if (!(fnp->f_flags & F_DDIR) && mode == XFR_READ)
if (mode == XFR_READ)
xfr_cnt = (UWORD) min(xfr_cnt, fnp->f_dir.dir_size - fnp->f_offset);
/* transfer a block */
@ -1634,7 +1633,6 @@ COUNT dos_setfattr(BYTE * name, UWORD attrp)
fnp->f_flags |= F_DMOD | F_DDATE;
/* close open files in compat mode, otherwise there was a critical error */
fnp->f_sft_idx = -1;
rc = merge_file_changes(fnp, -1);
if (rc == SUCCESS)
dir_write(fnp);