mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-23 13:54:30 +02:00
Remove redundant checks for fnodes==0 since the checks are done in dosfns.c.
Replace global f_nodes[] array by f_sft_idx fields in the fnodes. git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1401 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
a69b4ba011
commit
c179284147
@ -52,6 +52,7 @@ struct f_node {
|
|||||||
ULONG f_offset; /* byte offset for next op */
|
ULONG f_offset; /* byte offset for next op */
|
||||||
CLUSTER f_cluster_offset; /* relative cluster number within file */
|
CLUSTER f_cluster_offset; /* relative cluster number within file */
|
||||||
CLUSTER f_cluster; /* the cluster we are at */
|
CLUSTER f_cluster; /* the cluster we are at */
|
||||||
|
UBYTE f_sft_idx; /* corresponding SFT index */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define F_DMOD 0x40 /* directory has been modified */
|
#define F_DMOD 0x40 /* directory has been modified */
|
||||||
|
@ -39,7 +39,6 @@ BYTE *RcsId = "$Id$";
|
|||||||
/* */
|
/* */
|
||||||
STATIC int sft_to_fnode(f_node_ptr fnp, int fd);
|
STATIC int sft_to_fnode(f_node_ptr fnp, int fd);
|
||||||
f_node_ptr xlt_fd(COUNT);
|
f_node_ptr xlt_fd(COUNT);
|
||||||
COUNT xlt_fnp(f_node_ptr);
|
|
||||||
STATIC void fnode_to_sft(f_node_ptr fnp, int fd);
|
STATIC void fnode_to_sft(f_node_ptr fnp, int fd);
|
||||||
STATIC void save_far_f_node(f_node_ptr fnp);
|
STATIC void save_far_f_node(f_node_ptr fnp);
|
||||||
STATIC f_node_ptr split_path(char *, char *, f_node_ptr fnp);
|
STATIC f_node_ptr split_path(char *, char *, f_node_ptr fnp);
|
||||||
@ -260,12 +259,6 @@ COUNT dos_close(COUNT fd)
|
|||||||
/* Translate the fd into a useful pointer */
|
/* Translate the fd into a useful pointer */
|
||||||
fnp = xlt_fd(fd);
|
fnp = xlt_fd(fd);
|
||||||
|
|
||||||
/* 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 (fnp == (f_node_ptr) 0)
|
|
||||||
return DE_INVLDHNDL;
|
|
||||||
|
|
||||||
if (fnp->f_flags & F_DMOD)
|
if (fnp->f_flags & F_DMOD)
|
||||||
{
|
{
|
||||||
if (!(fnp->f_flags & F_DDATE))
|
if (!(fnp->f_flags & F_DDATE))
|
||||||
@ -421,7 +414,7 @@ STATIC void merge_file_changes(f_node_ptr fnp, int collect)
|
|||||||
if (!IsShareInstalled(FALSE))
|
if (!IsShareInstalled(FALSE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fd = xlt_fnp(fnp);
|
fd = fnp->f_sft_idx;
|
||||||
fnp2 = &fnode[1];
|
fnp2 = &fnode[1];
|
||||||
f_nodes_cnt = get_f_nodes_cnt();
|
f_nodes_cnt = get_f_nodes_cnt();
|
||||||
for (i = 0; i < f_nodes_cnt; i++)
|
for (i = 0; i < f_nodes_cnt; i++)
|
||||||
@ -853,12 +846,6 @@ COUNT dos_setftime(COUNT fd, date dp, time tp)
|
|||||||
/* operations are achieved through fnodes. */
|
/* operations are achieved through fnodes. */
|
||||||
fnp = xlt_fd(fd);
|
fnp = xlt_fd(fd);
|
||||||
|
|
||||||
/* 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 (fnp == (f_node_ptr) 0)
|
|
||||||
return DE_INVLDHNDL;
|
|
||||||
|
|
||||||
/* Set the date and time from the fnode and return */
|
/* Set the date and time from the fnode and return */
|
||||||
fnp->f_dir.dir_date = dp;
|
fnp->f_dir.dir_date = dp;
|
||||||
fnp->f_dir.dir_time = tp;
|
fnp->f_dir.dir_time = tp;
|
||||||
@ -880,12 +867,6 @@ BOOL dos_setfsize(COUNT fd, LONG size)
|
|||||||
/* operations are achieved through fnodes. */
|
/* operations are achieved through fnodes. */
|
||||||
fnp = xlt_fd(fd);
|
fnp = xlt_fd(fd);
|
||||||
|
|
||||||
/* 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 (fnp == (f_node_ptr) 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
/* Change the file size */
|
/* Change the file size */
|
||||||
fnp->f_dir.dir_size = size;
|
fnp->f_dir.dir_size = size;
|
||||||
|
|
||||||
@ -1466,14 +1447,6 @@ long rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
|
|||||||
/* operations are achieved through fnodes. */
|
/* operations are achieved through fnodes. */
|
||||||
fnp = xlt_fd(fd);
|
fnp = xlt_fd(fd);
|
||||||
|
|
||||||
/* 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 (fnp == (f_node_ptr) 0)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode==XFR_WRITE)
|
if (mode==XFR_WRITE)
|
||||||
{
|
{
|
||||||
fnp->f_dir.dir_attrib |= D_ARCHIVE;
|
fnp->f_dir.dir_attrib |= D_ARCHIVE;
|
||||||
@ -1723,13 +1696,6 @@ LONG dos_lseek(COUNT fd, LONG foffset, COUNT origin)
|
|||||||
|
|
||||||
fnp = xlt_fd(fd);
|
fnp = xlt_fd(fd);
|
||||||
|
|
||||||
/* 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 (fnp == (f_node_ptr) 0)
|
|
||||||
return (LONG) DE_INVLDHNDL;
|
|
||||||
|
|
||||||
/* now do the actual lseek adjustment to the file poitner */
|
/* now do the actual lseek adjustment to the file poitner */
|
||||||
switch (origin)
|
switch (origin)
|
||||||
{
|
{
|
||||||
@ -2052,12 +2018,6 @@ COUNT media_check(REG struct dpb FAR * dpbp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* translate the f_node pointer into an fd */
|
|
||||||
COUNT xlt_fnp(f_node_ptr fnp)
|
|
||||||
{
|
|
||||||
return fnode_fd[fnp - fnode];
|
|
||||||
}
|
|
||||||
|
|
||||||
STATIC int sft_to_fnode(f_node_ptr fnp, int fd)
|
STATIC int sft_to_fnode(f_node_ptr fnp, int fd)
|
||||||
{
|
{
|
||||||
sft FAR *sftp = idx_to_sft(fd);
|
sft FAR *sftp = idx_to_sft(fd);
|
||||||
@ -2065,6 +2025,9 @@ STATIC int sft_to_fnode(f_node_ptr fnp, int fd)
|
|||||||
|
|
||||||
if (FP_OFF(sftp) == (size_t) - 1)
|
if (FP_OFF(sftp) == (size_t) - 1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
fnp->f_sft_idx = fd;
|
||||||
|
|
||||||
flags = sftp->sft_flags;
|
flags = sftp->sft_flags;
|
||||||
fnp->f_flags = (flags & SFT_FDATE) | ((flags & SFT_FDIRTY) ^ SFT_FDIRTY);
|
fnp->f_flags = (flags & SFT_FDATE) | ((flags & SFT_FDIRTY) ^ SFT_FDIRTY);
|
||||||
fnp->f_dir.dir_attrib = sftp->sft_attrib;
|
fnp->f_dir.dir_attrib = sftp->sft_attrib;
|
||||||
@ -2095,10 +2058,7 @@ f_node_ptr xlt_fd(int fd)
|
|||||||
/* requested file was not open, tell the caller and exit */
|
/* requested file was not open, tell the caller and exit */
|
||||||
/* note: an invalid fd is indicated by a 0 return */
|
/* note: an invalid fd is indicated by a 0 return */
|
||||||
if (sft_to_fnode(&fnode[0], fd) == SUCCESS)
|
if (sft_to_fnode(&fnode[0], fd) == SUCCESS)
|
||||||
{
|
|
||||||
fnode_fd[0] = fd;
|
|
||||||
return &fnode[0];
|
return &fnode[0];
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2130,7 +2090,7 @@ STATIC void fnode_to_sft(f_node_ptr fnp, int fd)
|
|||||||
/* copy a near fnode to the corresponding SFT */
|
/* copy a near fnode to the corresponding SFT */
|
||||||
STATIC void save_far_f_node(f_node_ptr fnp)
|
STATIC void save_far_f_node(f_node_ptr fnp)
|
||||||
{
|
{
|
||||||
fnode_to_sft(fnp, xlt_fnp(fnp));
|
fnode_to_sft(fnp, fnp->f_sft_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TE
|
/* TE
|
||||||
|
@ -431,4 +431,3 @@ GLOBAL BYTE ASM HaltCpuWhileIdle;
|
|||||||
* 3) merge_file_changes (for SHARE)
|
* 3) merge_file_changes (for SHARE)
|
||||||
*/
|
*/
|
||||||
GLOBAL struct f_node fnode[2];
|
GLOBAL struct f_node fnode[2];
|
||||||
GLOBAL int fnode_fd[2];
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user