summaryrefslogtreecommitdiff
path: root/cpukit/libfs/src/rfs/rtems-rfs-dir.c
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2010-02-26 05:54:59 +0000
committerChris Johns <chrisj@rtems.org>2010-02-26 05:54:59 +0000
commit3cfa6368c3211eed83df08850f0af26481f161f6 (patch)
tree822cfa7d031cb1d644172cff41ab8f952c038a34 /cpukit/libfs/src/rfs/rtems-rfs-dir.c
parent28b38f3c3073a2edf7daa7140c5db204fa3645ff (diff)
010-02-26 Chris Johns <chrisj@rtems.org>
* libfs/src/rfs/rtems-rfs-block.c: Reset a buffer handle after moving down an indirection level. * libfs/src/rfs/rtems-rfs-dir.c: Move directory entry validation into a macro and use the macro. Fix the range check on the ino so all inodes can be used. * libfs/src/rfs/rtems-rfs-file-system.c, libfs/src/rfs/rtems-rfs-file-system.h:: Add a version number to the superblock. Use RTEMS_RFS_INODE_SIZE. * libfs/src/rfs/rtems-rfs-file.c: Fix the size offset on partial block lengths. Set the size in the file handle on a truncate to 0. * libfs/src/rfs/rtems-rfs-format.c: Add a version number to the superblock. Use RTEMS_RFS_INODE_SIZE. A better set of defaults for small disks. * libfs/src/rfs/rtems-rfs-inode.c: Use RTEMS_RFS_INODE_SIZE. Free the allocated inode if it cannot be opened. * libfs/src/rfs/rtems-rfs-inode.h: Add RTEMS_RFS_INODE_SIZE. * libfs/src/rfs/rtems-rfs-rtems-file.c: Move some of the iop acceses inside the fs lock. * libfs/src/rfs/rtems-rfs-shell.c: Use RTEMS_RFS_INODE_SIZE.
Diffstat (limited to 'cpukit/libfs/src/rfs/rtems-rfs-dir.c')
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-dir.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-dir.c b/cpukit/libfs/src/rfs/rtems-rfs-dir.c
index 4bc79a11cc..03fd0d873b 100644
--- a/cpukit/libfs/src/rfs/rtems-rfs-dir.c
+++ b/cpukit/libfs/src/rfs/rtems-rfs-dir.c
@@ -32,6 +32,13 @@
#include <rtems/rfs/rtems-rfs-dir.h>
#include <rtems/rfs/rtems-rfs-dir-hash.h>
+/**
+ * Validate the directory entry data.
+ */
+#define rtems_rfs_dir_entry_valid(_f, _l, _i) \
+ (((_l) <= RTEMS_RFS_DIR_ENTRY_SIZE) || ((_l) >= rtems_rfs_fs_max_name (_f)) \
+ || (_i < RTEMS_RFS_ROOT_INO) || (_i > rtems_rfs_fs_inodes (_f)))
+
int
rtems_rfs_dir_lookup_ino (rtems_rfs_file_system* fs,
rtems_rfs_inode_handle* inode,
@@ -136,10 +143,7 @@ rtems_rfs_dir_lookup_ino (rtems_rfs_file_system* fs,
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
- if ((elength <= RTEMS_RFS_DIR_ENTRY_SIZE)
- || (elength >= rtems_rfs_fs_max_name (fs))
- || (*ino < RTEMS_RFS_ROOT_INO)
- || (*ino >= rtems_rfs_fs_inodes (fs)))
+ if (rtems_rfs_dir_entry_valid (fs, elength, *ino))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_LOOKUP_INO))
printf ("rtems-rfs: dir-lookup-ino: " \
@@ -331,10 +335,7 @@ rtems_rfs_dir_add_entry (rtems_rfs_file_system* fs,
break;
}
- if ((elength <= RTEMS_RFS_DIR_ENTRY_SIZE)
- || (elength >= rtems_rfs_fs_max_name (fs))
- || (eino < RTEMS_RFS_ROOT_INO)
- || (eino >= rtems_rfs_fs_inodes (fs)))
+ if (rtems_rfs_dir_entry_valid (fs, elength, eino))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_ADD_ENTRY))
printf ("rtems-rfs: dir-add-entry: " \
@@ -425,10 +426,7 @@ rtems_rfs_dir_del_entry (rtems_rfs_file_system* fs,
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
- if ((elength <= RTEMS_RFS_DIR_ENTRY_SIZE)
- || (elength >= rtems_rfs_fs_max_name (fs))
- || (eino < RTEMS_RFS_ROOT_INO)
- || (eino >= rtems_rfs_fs_inodes (fs)))
+ if (rtems_rfs_dir_entry_valid (fs, elength, eino))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_DEL_ENTRY))
printf ("rtems-rfs: dir-del-entry: " \
@@ -572,10 +570,7 @@ rtems_rfs_dir_read (rtems_rfs_file_system* fs,
if (elength != RTEMS_RFS_DIR_ENTRY_EMPTY)
{
- if ((elength <= RTEMS_RFS_DIR_ENTRY_SIZE)
- || (elength >= rtems_rfs_fs_max_name (fs))
- || (eino < RTEMS_RFS_ROOT_INO)
- || (eino >= rtems_rfs_fs_inodes (fs)))
+ if (rtems_rfs_dir_entry_valid (fs, elength, eino))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ))
printf ("rtems-rfs: dir-read: " \
@@ -690,10 +685,7 @@ rtems_rfs_dir_empty (rtems_rfs_file_system* fs,
if (elength == RTEMS_RFS_DIR_ENTRY_EMPTY)
break;
- if ((elength <= RTEMS_RFS_DIR_ENTRY_SIZE)
- || (elength >= rtems_rfs_fs_max_name (fs))
- || (eino < RTEMS_RFS_ROOT_INO)
- || (eino >= rtems_rfs_fs_inodes (fs)))
+ if (rtems_rfs_dir_entry_valid (fs, elength, eino))
{
if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_EMPTY))
printf ("rtems-rfs: dir-empty: " \