Eliminate xlt_fd(), save_far_f_node(), and the redundant fnode f_mode field.

git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1404 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Bart Oldeman 2009-05-26 18:34:05 +00:00
parent 4a81e6e9a2
commit 76f1c10a4e
3 changed files with 27 additions and 73 deletions

View File

@ -36,8 +36,6 @@ static BYTE *fnode_hRcsId =
#endif
struct f_node {
COUNT f_mode; /* read, write, read-write, etc */
UWORD f_flags; /* file flags */
struct dirent f_dir; /* this file's dir entry image */

View File

@ -61,9 +61,6 @@ f_node_ptr dir_open(register const char *dirname, f_node_ptr fnp)
int i;
char fcbname[FNAME_SIZE + FEXT_SIZE];
/* Force the fnode into read-write mode */
fnp->f_mode = RDWR;
/* determine what drive and dpb we are using... */
fnp->f_dpb = get_dpb(dirname[0]-'A');
/* Perform all directory common handling after all special */
@ -411,9 +408,6 @@ COUNT dos_findnext(void)
fnp = &fnode[0];
memset(fnp, 0, sizeof(*fnp));
/* Force the fnode into read-write mode */
fnp->f_mode = RDWR;
/* Select the default to help non-drive specified path */
/* searches... */
fnp->f_dpb = get_dpb(dmp->dm_drive);

View File

@ -37,10 +37,8 @@ BYTE *RcsId = "$Id$";
/* */
/* function prototypes */
/* */
STATIC int sft_to_fnode(f_node_ptr fnp, int fd);
f_node_ptr xlt_fd(COUNT);
STATIC void fnode_to_sft(f_node_ptr fnp, int fd);
STATIC void save_far_f_node(f_node_ptr fnp);
STATIC f_node_ptr sft_to_fnode(int fd);
STATIC void fnode_to_sft(f_node_ptr fnp);
STATIC f_node_ptr split_path(char *, char *, f_node_ptr fnp);
STATIC BOOL find_fname(f_node_ptr, char *, int);
/* /// Added - Ron Cemer */
@ -148,7 +146,7 @@ int dos_open(char *path, unsigned flags, unsigned attrib, int fd)
/* next split the passed dir into comopnents (i.e. - path to */
/* new directory and name of new directory. */
if ((fnp = split_path(path, fcbname, xlt_fd(fd))) == NULL)
if ((fnp = split_path(path, fcbname, sft_to_fnode(fd))) == NULL)
return DE_PATHNOTFND;
/* Check that we don't have a duplicate name, so if we */
@ -208,10 +206,6 @@ int dos_open(char *path, unsigned flags, unsigned attrib, int fd)
return DE_FILENOTFND;
}
/* Set the fnode to the desired mode */
/* Updating the directory entry first. */
fnp->f_mode = flags & O_ACCMODE;
if (status != S_OPENED)
{
init_direntry(&fnp->f_dir, attrib, FREE, fcbname);
@ -239,7 +233,7 @@ int dos_open(char *path, unsigned flags, unsigned attrib, int fd)
fnp->f_cluster = getdstart(fnp->f_dpb, &fnp->f_dir);
fnp->f_cluster_offset = 0;
save_far_f_node(fnp);
fnode_to_sft(fnp);
return status;
}
@ -253,10 +247,8 @@ BOOL fcmp_wild(const char * s1, const char * s2, unsigned n)
COUNT dos_close(COUNT fd)
{
f_node_ptr fnp;
/* Translate the fd into a useful pointer */
fnp = xlt_fd(fd);
f_node_ptr fnp = sft_to_fnode(fd);
if (fnp->f_flags & F_DMOD)
{
@ -826,11 +818,9 @@ time dos_gettime(void)
/* */
COUNT dos_setftime(COUNT fd, date dp, time tp)
{
f_node_ptr fnp;
/* Translate the fd into an fnode pointer, since all internal */
/* operations are achieved through fnodes. */
fnp = xlt_fd(fd);
f_node_ptr fnp = sft_to_fnode(fd);
/* Set the date and time from the fnode and return */
fnp->f_dir.dir_date = dp;
@ -838,7 +828,7 @@ COUNT dos_setftime(COUNT fd, date dp, time tp)
/* mark file as modified and set this date upon closing */
fnp->f_flags |= F_DMOD | F_DDATE;
save_far_f_node(fnp);
fnode_to_sft(fnp);
return SUCCESS;
}
@ -847,17 +837,15 @@ COUNT dos_setftime(COUNT fd, date dp, time tp)
/* */
BOOL dos_setfsize(COUNT fd, LONG size)
{
f_node_ptr fnp;
/* Translate the fd into an fnode pointer, since all internal */
/* operations are achieved through fnodes. */
fnp = xlt_fd(fd);
f_node_ptr fnp = sft_to_fnode(fd);
/* Change the file size */
fnp->f_dir.dir_size = size;
merge_file_changes(fnp, FALSE); /* /// Added - Ron Cemer */
save_far_f_node(fnp);
fnode_to_sft(fnp);
return TRUE;
}
@ -992,9 +980,6 @@ COUNT dos_mkdir(BYTE * dir)
return DE_HNDLDSKFULL;
}
/* Set the fnode to the desired mode */
fnp->f_mode = WRONLY;
init_direntry(&fnp->f_dir, D_DIR, free_fat, fcbname);
fnp->f_flags = F_DMOD | F_DDIR;
@ -1414,7 +1399,9 @@ STATIC COUNT dos_extend(f_node_ptr fnp)
dosfns.c */
long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
{
REG f_node_ptr fnp;
/* Translate the fd into an fnode pointer, since all internal */
/* operations are achieved through fnodes. */
REG f_node_ptr fnp = sft_to_fnode(fd);
REG struct buffer FAR *bp;
UCOUNT xfr_cnt = 0;
UCOUNT ret_cnt = 0;
@ -1429,9 +1416,6 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
fd, FP_SEG(buffer), FP_OFF(buffer), count);
}
#endif
/* Translate the fd into an fnode pointer, since all internal */
/* operations are achieved through fnodes. */
fnp = xlt_fd(fd);
if (mode==XFR_WRITE)
{
@ -1441,7 +1425,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
if (dos_extend(fnp) != SUCCESS)
{
save_far_f_node(fnp);
fnode_to_sft(fnp);
return 0;
}
}
@ -1467,7 +1451,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
shrink_file(fnp); /* this is the only call to shrink_file... */
/* why does empty write -always- truncate to current offset? */
}
save_far_f_node(fnp);
fnode_to_sft(fnp);
return 0;
}
@ -1487,7 +1471,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
/* but only for regular files. */
if (mode == XFR_READ && !(fnp->f_flags & F_DDIR) && (fnp->f_offset >= fnp->f_dir.dir_size))
{
save_far_f_node(fnp);
fnode_to_sft(fnp);
return ret_cnt;
}
@ -1518,7 +1502,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
#endif
if (map_cluster(fnp, mode) != SUCCESS)
{
save_far_f_node(fnp);
fnode_to_sft(fnp);
return ret_cnt;
}
if (mode == XFR_WRITE)
@ -1590,7 +1574,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
mode == XFR_READ ? DSKREAD : DSKWRITE))
{
fnp->f_offset = startoffset;
save_far_f_node(fnp);
fnode_to_sft(fnp);
return DE_ACCESS;
}
@ -1615,7 +1599,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
#endif
if (bp == NULL) /* (struct buffer *)0 --> DS:0 !! */
{
save_far_f_node(fnp);
fnode_to_sft(fnp);
return ret_cnt;
}
@ -1668,7 +1652,7 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
merge_file_changes(fnp, FALSE); /* /// Added - Ron Cemer */
}
}
save_far_f_node(fnp);
fnode_to_sft(fnp);
return ret_cnt;
}
@ -1676,11 +1660,8 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
/* Returns a long current offset or a negative error code */
LONG dos_lseek(COUNT fd, LONG foffset, COUNT origin)
{
REG f_node_ptr fnp;
/* Translate the fd into a useful pointer */
fnp = xlt_fd(fd);
REG f_node_ptr fnp = sft_to_fnode(fd);
/* now do the actual lseek adjustment to the file poitner */
switch (origin)
@ -1704,7 +1685,7 @@ LONG dos_lseek(COUNT fd, LONG foffset, COUNT origin)
default:
return (LONG) DE_INVLDFUNC;
}
save_far_f_node(fnp);
fnode_to_sft(fnp);
return fnp->f_offset;
}
@ -2017,19 +1998,17 @@ COUNT media_check(REG struct dpb FAR * dpbp)
}
}
STATIC int sft_to_fnode(f_node_ptr fnp, int fd)
/* copy the SFT fd into the first near fnode */
STATIC f_node_ptr sft_to_fnode(int fd)
{
sft FAR *sftp = idx_to_sft(fd);
f_node_ptr fnp = &fnode[0];
UWORD flags;
if (FP_OFF(sftp) == (size_t) - 1)
return -1;
fnp->f_sft_idx = fd;
flags = sftp->sft_flags;
fnp->f_flags = (flags & SFT_FDATE) | ((flags & SFT_FDIRTY) ^ SFT_FDIRTY);
fnp->f_mode = sftp->sft_mode & O_ACCMODE;
fnp->f_dir.dir_attrib = sftp->sft_attrib;
fmemcpy(fnp->f_dir.dir_name, sftp->sft_name, FNAME_SIZE + FEXT_SIZE);
@ -2049,23 +2028,12 @@ STATIC int sft_to_fnode(f_node_ptr fnp, int fd)
#else
fnp->f_cluster_offset = sftp->sft_relclust;
#endif
return SUCCESS;
return fnp;
}
/* copy the SFT fd into the first near fnode */
f_node_ptr xlt_fd(int fd)
STATIC void fnode_to_sft(f_node_ptr fnp)
{
/* If the fd was invalid because it was out of range or the */
/* requested file was not open, tell the caller and exit */
/* note: an invalid fd is indicated by a 0 return */
if (sft_to_fnode(&fnode[0], fd) == SUCCESS)
return &fnode[0];
return NULL;
}
STATIC void fnode_to_sft(f_node_ptr fnp, int fd)
{
sft FAR *sftp = idx_to_sft(fd);
sft FAR *sftp = idx_to_sft(fnp->f_sft_idx);
sftp->sft_flags = (sftp->sft_flags & ~(SFT_FDATE | SFT_FDIRTY)) |
((fnp->f_flags & (SFT_FDATE | SFT_FDIRTY)) ^ SFT_FDIRTY);
@ -2088,12 +2056,6 @@ STATIC void fnode_to_sft(f_node_ptr fnp, int fd)
#endif
}
/* copy a near fnode to the corresponding SFT */
STATIC void save_far_f_node(f_node_ptr fnp)
{
fnode_to_sft(fnp, fnp->f_sft_idx);
}
/* TE
if the current filesize in FAT is larger then the dir_size
it's truncated here.