summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-02-24 16:40:19 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-03-13 12:24:16 +0100
commit70927458b7d9b8579cb98782423a8afac4fa624e (patch)
tree44d7b94c8f0629b271d44b82f10cf62fa54a80ae /cpukit/libfs
parentIMFS: Removed superfluous imfs_dir_open() (diff)
downloadrtems-70927458b7d9b8579cb98782423a8afac4fa624e.tar.bz2
IMFS: New support functions
Add and use IMFS_type() and IMFS_is_directory().
Diffstat (limited to 'cpukit/libfs')
-rw-r--r--cpukit/libfs/src/imfs/imfs.h10
-rw-r--r--cpukit/libfs/src/imfs/imfs_debug.c8
-rw-r--r--cpukit/libfs/src/imfs/imfs_eval.c18
-rw-r--r--cpukit/libfs/src/imfs/imfs_fsunmount.c4
-rw-r--r--cpukit/libfs/src/imfs/imfs_mount.c2
-rw-r--r--cpukit/libfs/src/imfs/imfs_ntype.c4
-rw-r--r--cpukit/libfs/src/imfs/imfs_stat.c6
-rw-r--r--cpukit/libfs/src/imfs/imfs_unmount.c2
-rw-r--r--cpukit/libfs/src/imfs/memfile.c20
9 files changed, 43 insertions, 31 deletions
diff --git a/cpukit/libfs/src/imfs/imfs.h b/cpukit/libfs/src/imfs/imfs.h
index 94988a047c..7c926a854e 100644
--- a/cpukit/libfs/src/imfs/imfs.h
+++ b/cpukit/libfs/src/imfs/imfs.h
@@ -499,6 +499,16 @@ static inline void IMFS_remove_from_directory( IMFS_jnode_t *node )
rtems_chain_extract_unprotected( &node->Node );
}
+static inline IMFS_jnode_types_t IMFS_type( const IMFS_jnode_t *node )
+{
+ return node->type;
+}
+
+static inline bool IMFS_is_directory( const IMFS_jnode_t *node )
+{
+ return node->type == IMFS_DIRECTORY;
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/cpukit/libfs/src/imfs/imfs_debug.c b/cpukit/libfs/src/imfs/imfs_debug.c
index 091237275d..8ae0bc6756 100644
--- a/cpukit/libfs/src/imfs/imfs_debug.c
+++ b/cpukit/libfs/src/imfs/imfs_debug.c
@@ -33,7 +33,7 @@ static void IMFS_print_jnode(
IMFS_assert( the_jnode );
fprintf(stdout, "%s", the_jnode->name );
- switch( the_jnode->type ) {
+ switch( IMFS_type( the_jnode ) ) {
case IMFS_DIRECTORY:
fprintf(stdout, "/" );
break;
@@ -78,7 +78,7 @@ static void IMFS_print_jnode(
return;
default:
- fprintf(stdout, " bad type %d\n", the_jnode->type );
+ fprintf(stdout, " bad type %d\n", IMFS_type( the_jnode ) );
return;
}
puts("");
@@ -103,7 +103,7 @@ static void IMFS_dump_directory(
IMFS_assert( the_directory );
IMFS_assert( level >= 0 );
- IMFS_assert( the_directory->type == IMFS_DIRECTORY );
+ IMFS_assert( IMFS_is_directory( the_directory ) );
the_chain = &the_directory->info.directory.Entries;
@@ -116,7 +116,7 @@ static void IMFS_dump_directory(
for ( i=0 ; i<=level ; i++ )
fprintf(stdout, "...." );
IMFS_print_jnode( the_jnode );
- if ( the_jnode->type == IMFS_DIRECTORY )
+ if ( IMFS_is_directory( the_jnode ) )
IMFS_dump_directory( the_jnode, level + 1 );
}
}
diff --git a/cpukit/libfs/src/imfs/imfs_eval.c b/cpukit/libfs/src/imfs/imfs_eval.c
index 5b1ccfb989..a65569a470 100644
--- a/cpukit/libfs/src/imfs/imfs_eval.c
+++ b/cpukit/libfs/src/imfs/imfs_eval.c
@@ -50,7 +50,7 @@ void IMFS_Set_handlers( rtems_filesystem_location_info_t *loc )
loc->handlers = handlers;
}
-static bool IMFS_is_directory(
+static bool IMFS_eval_is_directory(
rtems_filesystem_eval_path_context_t *ctx,
void *arg
)
@@ -59,7 +59,7 @@ static bool IMFS_is_directory(
rtems_filesystem_eval_path_get_currentloc( ctx );
IMFS_jnode_t *node = currentloc->node_access;
- return node->type == IMFS_DIRECTORY;
+ return IMFS_is_directory( node );
}
static IMFS_jnode_t *IMFS_search_in_directory(
@@ -96,12 +96,13 @@ static IMFS_jnode_t *IMFS_search_in_directory(
}
static rtems_filesystem_global_location_t **IMFS_is_mount_point(
- IMFS_jnode_t *node
+ IMFS_jnode_t *node,
+ IMFS_jnode_types_t type
)
{
rtems_filesystem_global_location_t **fs_root_ptr = NULL;
- if ( node->type == IMFS_DIRECTORY ) {
+ if ( type == IMFS_DIRECTORY ) {
if ( node->info.directory.mt_fs != NULL ) {
fs_root_ptr = &node->info.directory.mt_fs->mt_fs_root;
}
@@ -138,20 +139,21 @@ static rtems_filesystem_eval_path_generic_status IMFS_eval_token(
int eval_flags = rtems_filesystem_eval_path_get_flags( ctx );
bool follow_hard_link = (eval_flags & RTEMS_FS_FOLLOW_HARD_LINK) != 0;
bool follow_sym_link = (eval_flags & RTEMS_FS_FOLLOW_SYM_LINK) != 0;
+ IMFS_jnode_types_t type = IMFS_type( entry );
rtems_filesystem_eval_path_clear_token( ctx );
- if ( entry->type == IMFS_HARD_LINK && (follow_hard_link || !terminal)) {
+ if ( type == IMFS_HARD_LINK && (follow_hard_link || !terminal)) {
entry = entry->info.hard_link.link_node;
}
- if ( entry->type == IMFS_SYM_LINK && (follow_sym_link || !terminal)) {
+ if ( type == IMFS_SYM_LINK && (follow_sym_link || !terminal)) {
const char *target = entry->info.sym_link.name;
rtems_filesystem_eval_path_recursive( ctx, target, strlen( target ) );
} else {
rtems_filesystem_global_location_t **fs_root_ptr =
- IMFS_is_mount_point( entry );
+ IMFS_is_mount_point( entry, type );
if ( fs_root_ptr == NULL ) {
--dir->reference_count;
@@ -184,7 +186,7 @@ static rtems_filesystem_eval_path_generic_status IMFS_eval_token(
}
static const rtems_filesystem_eval_path_generic_config IMFS_eval_config = {
- .is_directory = IMFS_is_directory,
+ .is_directory = IMFS_eval_is_directory,
.eval_token = IMFS_eval_token
};
diff --git a/cpukit/libfs/src/imfs/imfs_fsunmount.c b/cpukit/libfs/src/imfs/imfs_fsunmount.c
index 6f9388ea86..acce21258c 100644
--- a/cpukit/libfs/src/imfs/imfs_fsunmount.c
+++ b/cpukit/libfs/src/imfs/imfs_fsunmount.c
@@ -61,7 +61,7 @@ void IMFS_fsunmount(
loc.node_access = (void *)jnode;
IMFS_Set_handlers( &loc );
- if ( jnode->type != IMFS_DIRECTORY || jnode_has_no_children( jnode ) ) {
+ if ( !IMFS_is_directory( jnode ) || jnode_has_no_children( jnode ) ) {
result = IMFS_rmnod( NULL, &loc );
if ( result != 0 )
rtems_fatal_error_occurred( 0xdeadbeef );
@@ -69,7 +69,7 @@ void IMFS_fsunmount(
jnode = next;
}
if ( jnode != NULL ) {
- if ( jnode->type == IMFS_DIRECTORY ) {
+ if ( IMFS_is_directory( jnode ) ) {
if ( jnode_has_children( jnode ) )
jnode = jnode_get_first_child( jnode );
}
diff --git a/cpukit/libfs/src/imfs/imfs_mount.c b/cpukit/libfs/src/imfs/imfs_mount.c
index 243e5a0e30..ca53d95be2 100644
--- a/cpukit/libfs/src/imfs/imfs_mount.c
+++ b/cpukit/libfs/src/imfs/imfs_mount.c
@@ -25,7 +25,7 @@ int IMFS_mount( rtems_filesystem_mount_table_entry_t *mt_entry )
int rv = 0;
IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
- if ( node->type == IMFS_DIRECTORY ) {
+ if ( IMFS_is_directory( node ) ) {
if ( node->info.directory.mt_fs == NULL ) {
node->info.directory.mt_fs = mt_entry;
} else {
diff --git a/cpukit/libfs/src/imfs/imfs_ntype.c b/cpukit/libfs/src/imfs/imfs_ntype.c
index f399707c0c..fa9a37dd6e 100644
--- a/cpukit/libfs/src/imfs/imfs_ntype.c
+++ b/cpukit/libfs/src/imfs/imfs_ntype.c
@@ -28,12 +28,12 @@ rtems_filesystem_node_types_t IMFS_node_type(
)
{
const IMFS_jnode_t *node = loc->node_access;
- IMFS_jnode_types_t imfs_type = node->type;
+ IMFS_jnode_types_t imfs_type = IMFS_type( node );
rtems_filesystem_node_types_t type;
switch ( imfs_type ) {
case IMFS_HARD_LINK:
- type = node->info.hard_link.link_node->type;
+ type = IMFS_type( node->info.hard_link.link_node );
break;
case IMFS_LINEAR_FILE:
type = RTEMS_FILESYSTEM_MEMORY_FILE;
diff --git a/cpukit/libfs/src/imfs/imfs_stat.c b/cpukit/libfs/src/imfs/imfs_stat.c
index 66d1ca2ba9..42185f3683 100644
--- a/cpukit/libfs/src/imfs/imfs_stat.c
+++ b/cpukit/libfs/src/imfs/imfs_stat.c
@@ -49,11 +49,11 @@ int IMFS_stat(
IMFS_jnode_t *the_jnode = loc->node_access;
IMFS_device_t *io = &the_jnode->info.device;
- if ( the_jnode->type == IMFS_HARD_LINK ) {
+ if ( IMFS_type( the_jnode ) == IMFS_HARD_LINK ) {
the_jnode = the_jnode->info.hard_link.link_node;
}
- switch ( the_jnode->type ) {
+ switch ( IMFS_type( the_jnode ) ) {
case IMFS_DEVICE:
buf->st_rdev = rtems_filesystem_make_dev_t( io->major, io->minor );
@@ -97,7 +97,7 @@ int IMFS_stat(
buf->st_mtime = the_jnode->stat_mtime;
buf->st_ctime = the_jnode->stat_ctime;
- if ( the_jnode->type != IMFS_DIRECTORY ) {
+ if ( !IMFS_is_directory( the_jnode ) ) {
buf->st_blksize = imfs_rq_memfile_bytes_per_block;
}
diff --git a/cpukit/libfs/src/imfs/imfs_unmount.c b/cpukit/libfs/src/imfs/imfs_unmount.c
index 47acec9320..f6315abeee 100644
--- a/cpukit/libfs/src/imfs/imfs_unmount.c
+++ b/cpukit/libfs/src/imfs/imfs_unmount.c
@@ -25,7 +25,7 @@ int IMFS_unmount( rtems_filesystem_mount_table_entry_t *mt_entry )
int rv = 0;
IMFS_jnode_t *node = mt_entry->mt_point_node->location.node_access;
- if ( node->type == IMFS_DIRECTORY ) {
+ if ( IMFS_is_directory( node ) ) {
if ( node->info.directory.mt_fs == mt_entry ) {
node->info.directory.mt_fs = NULL;
} else {
diff --git a/cpukit/libfs/src/imfs/memfile.c b/cpukit/libfs/src/imfs/memfile.c
index fed8914235..aa3f8a71b4 100644
--- a/cpukit/libfs/src/imfs/memfile.c
+++ b/cpukit/libfs/src/imfs/memfile.c
@@ -93,7 +93,7 @@ int memfile_open(
* Perform 'copy on write' for linear files
*/
if ((iop->flags & (LIBIO_FLAGS_WRITE | LIBIO_FLAGS_APPEND))
- && (the_jnode->type == IMFS_LINEAR_FILE)) {
+ && (IMFS_type( the_jnode ) == IMFS_LINEAR_FILE)) {
uint32_t count = the_jnode->info.linearfile.size;
const unsigned char *buffer = the_jnode->info.linearfile.direct;
@@ -184,7 +184,7 @@ off_t memfile_lseek(
the_jnode = iop->pathinfo.node_access;
- if (the_jnode->type == IMFS_LINEAR_FILE) {
+ if (IMFS_type( the_jnode ) == IMFS_LINEAR_FILE) {
if (iop->offset > the_jnode->info.linearfile.size)
iop->offset = the_jnode->info.linearfile.size;
}
@@ -259,7 +259,7 @@ MEMFILE_STATIC int IMFS_memfile_extend(
* Perform internal consistency checks
*/
IMFS_assert( the_jnode );
- IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE );
+ IMFS_assert( IMFS_type( the_jnode ) == IMFS_MEMORY_FILE );
/*
* Verify new file size is supported
@@ -315,7 +315,7 @@ MEMFILE_STATIC int IMFS_memfile_addblock(
block_p *block_entry_ptr;
IMFS_assert( the_jnode );
- IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE );
+ IMFS_assert( IMFS_type( the_jnode ) == IMFS_MEMORY_FILE );
/*
* Obtain the pointer for the specified block number
@@ -434,7 +434,7 @@ int IMFS_memfile_remove(
* Perform internal consistency checks
*/
IMFS_assert( the_jnode );
- IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE );
+ IMFS_assert( IMFS_type( the_jnode ) == IMFS_MEMORY_FILE );
/*
* Eventually this could be set smarter at each call to
@@ -518,8 +518,8 @@ MEMFILE_STATIC ssize_t IMFS_memfile_read(
* Perform internal consistency checks
*/
IMFS_assert( the_jnode );
- IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE ||
- the_jnode->type == IMFS_LINEAR_FILE );
+ IMFS_assert( IMFS_type( the_jnode ) == IMFS_MEMORY_FILE ||
+ IMFS_type( the_jnode ) == IMFS_LINEAR_FILE );
IMFS_assert( dest );
/*
@@ -528,7 +528,7 @@ MEMFILE_STATIC ssize_t IMFS_memfile_read(
*/
my_length = length;
- if (the_jnode->type == IMFS_LINEAR_FILE) {
+ if ( IMFS_type( the_jnode ) == IMFS_LINEAR_FILE ) {
unsigned char *file_ptr;
file_ptr = (unsigned char *)the_jnode->info.linearfile.direct;
@@ -642,7 +642,7 @@ MEMFILE_STATIC ssize_t IMFS_memfile_write(
*/
IMFS_assert( source );
IMFS_assert( the_jnode );
- IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE );
+ IMFS_assert( IMFS_type( the_jnode ) == IMFS_MEMORY_FILE );
my_length = length;
/*
@@ -787,7 +787,7 @@ block_p *IMFS_memfile_get_block_pointer(
* Perform internal consistency checks
*/
IMFS_assert( the_jnode );
- IMFS_assert( the_jnode->type == IMFS_MEMORY_FILE );
+ IMFS_assert( IMFS_type( the_jnode ) == IMFS_MEMORY_FILE );
info = &the_jnode->info.file;
my_block = block;