diff options
author | Chris Johns <chrisj@rtems.org> | 2011-03-15 07:32:39 +0000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2011-03-15 07:32:39 +0000 |
commit | 597624691b9611fc67b0f38b9257cea23287c6c2 (patch) | |
tree | 571390327fe6d3eca805e6568756aa39e3da1bba /cpukit/libfs/src/rfs/rtems-rfs-rtems-file.c | |
parent | 2011-03-15 Chris Johns <chrisj@rtems.org> (diff) | |
download | rtems-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.c | 72 |
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, |