summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2011-03-15 07:32:39 +0000
committerChris Johns <chrisj@rtems.org>2011-03-15 07:32:39 +0000
commit597624691b9611fc67b0f38b9257cea23287c6c2 (patch)
tree571390327fe6d3eca805e6568756aa39e3da1bba /cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c
parent2011-03-15 Chris Johns <chrisj@rtems.org> (diff)
downloadrtems-597624691b9611fc67b0f38b9257cea23287c6c2.tar.bz2
2011-03-15 Chris Johns <chrisj@rtems.org>
* libfs/src/rfs/rtems-rfs-rtems-file.c, libfs/src/rfs/rtems-rfs-rtems.c, libfs/src/rfs/rtems-rfs-rtems.h: The fix to the removal of file_info from iop was broken. The node_access field must be the inode number in the RFS because the file system ops provides no way to tell is a stat call is the result of stat, fstat, or lstat. The solution is to move the file handle to node_access_2 which is also shared with doff but these do not overlap.
Diffstat (limited to 'cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c')
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c72
1 files changed, 8 insertions, 64 deletions
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c b/cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c
index 0c9641490d..2f2df428dd 100644
--- a/cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c
+++ b/cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c
@@ -71,7 +71,7 @@ rtems_rfs_rtems_file_open (rtems_libio_t* iop,
printf("rtems-rfs: file-open: handle:%p\n", file);
iop->size = rtems_rfs_file_size (file);
- iop->pathinfo.node_access = file;
+ rtems_rfs_rtems_set_iop_file_handle (iop, file);
rtems_rfs_rtems_unlock (fs);
return 0;
@@ -87,7 +87,7 @@ rtems_rfs_rtems_file_open (rtems_libio_t* iop,
static int
rtems_rfs_rtems_file_close (rtems_libio_t* iop)
{
- rtems_rfs_file_handle* file = iop->pathinfo.node_access;
+ rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
rtems_rfs_file_system* fs = rtems_rfs_file_fs (file);
int rc;
@@ -117,7 +117,7 @@ rtems_rfs_rtems_file_read (rtems_libio_t* iop,
void* buffer,
size_t count)
{
- rtems_rfs_file_handle* file = iop->pathinfo.node_access;
+ rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
rtems_rfs_pos pos;
uint8_t* data = buffer;
ssize_t read = 0;
@@ -182,7 +182,7 @@ rtems_rfs_rtems_file_write (rtems_libio_t* iop,
const void* buffer,
size_t count)
{
- rtems_rfs_file_handle* file = iop->pathinfo.node_access;
+ rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
rtems_rfs_pos pos;
const uint8_t* data = buffer;
ssize_t write = 0;
@@ -279,7 +279,7 @@ rtems_rfs_rtems_file_lseek (rtems_libio_t* iop,
rtems_off64_t offset,
int whence)
{
- rtems_rfs_file_handle* file = iop->pathinfo.node_access;
+ rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
rtems_rfs_pos pos;
int rc;
@@ -303,62 +303,6 @@ rtems_rfs_rtems_file_lseek (rtems_libio_t* iop,
}
/**
- * Stat the file.
- *
- * @param iop
- * @param buf
- * @return int
- */
-static int
-rtems_rfs_rtems_file_fstat (rtems_filesystem_location_info_t* pathloc,
- struct stat* buf)
-{
- rtems_rfs_file_handle* file = pathloc->node_access;
- int rc;
-
- if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_STAT))
- printf ("rtems-rfs: file-fstat: handle:%p\n", file);
-
- rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
-
- rc = rtems_rfs_rtems_stat_inode (rtems_rfs_file_fs (file),
- rtems_rfs_file_inode (file),
- buf);
-
- rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
-
- return rc;
-}
-
-/**
- * File change mode routine.
- *
- * @param iop
- * @param mode
- * @return int
- */
-static int
-rtems_rfs_rtems_file_fchmod (rtems_filesystem_location_info_t* pathloc,
- mode_t mode)
-{
- rtems_rfs_file_handle* file = pathloc->node_access;
- int rc;
-
- if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FCHMOD))
- printf ("rtems-rfs: file-fchmod: handle:%p\n", file);
-
- rtems_rfs_rtems_lock (rtems_rfs_file_fs (file));
-
- rc = rtems_rfs_rtems_fchmod_inode (rtems_rfs_file_fs (file),
- rtems_rfs_file_inode (file),
- mode);
-
- rtems_rfs_rtems_unlock (rtems_rfs_file_fs (file));
-
- return rc;
-}
-
-/**
* This routine processes the ftruncate() system call.
*
* @param iop
@@ -369,7 +313,7 @@ static int
rtems_rfs_rtems_file_ftruncate (rtems_libio_t* iop,
rtems_off64_t length)
{
- rtems_rfs_file_handle* file = iop->pathinfo.node_access;
+ rtems_rfs_file_handle* file = rtems_rfs_rtems_get_iop_file_handle (iop);
int rc;
if (rtems_rfs_rtems_trace (RTEMS_RFS_RTEMS_DEBUG_FILE_FTRUNC))
@@ -399,8 +343,8 @@ const rtems_filesystem_file_handlers_r rtems_rfs_rtems_file_handlers = {
.write_h = rtems_rfs_rtems_file_write,
.ioctl_h = rtems_rfs_rtems_file_ioctl,
.lseek_h = rtems_rfs_rtems_file_lseek,
- .fstat_h = rtems_rfs_rtems_file_fstat,
- .fchmod_h = rtems_rfs_rtems_file_fchmod,
+ .fstat_h = rtems_rfs_rtems_fstat,
+ .fchmod_h = rtems_rfs_rtems_fchmod,
.ftruncate_h = rtems_rfs_rtems_file_ftruncate,
.fpathconf_h = rtems_filesystem_default_fpathconf,
.fsync_h = rtems_rfs_rtems_fdatasync,