This helps to use IMFS_make_generic_node() without pulling in the complete IMFS implementation. --- cpukit/libfs/src/imfs/imfs_initsupp.c | 89 ---------------------------------- cpukit/libfs/src/imfs/imfs_stat.c | 91 +++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 89 deletions(-)
diff --git a/cpukit/libfs/src/imfs/imfs_initsupp.c b/cpukit/libfs/src/imfs/imfs_initsupp.c index 8301831..27b93cb 100644 --- a/cpukit/libfs/src/imfs/imfs_initsupp.c +++ b/cpukit/libfs/src/imfs/imfs_initsupp.c @@ -51,52 +51,6 @@ static int IMFS_determine_bytes_per_block( return 0; } -IMFS_jnode_t *IMFS_initialize_node( - IMFS_jnode_t *node, - const IMFS_node_control *node_control, - const char *name, - size_t namelen, - mode_t mode, - void *arg -) -{ - struct timeval tv; - - if ( namelen > IMFS_NAME_MAX ) { - errno = ENAMETOOLONG; - - return NULL; - } - - gettimeofday( &tv, 0 ); - - /* - * Fill in the basic information - */ - node->name = name; - node->namelen = namelen; - node->reference_count = 1; - node->st_nlink = 1; - node->control = node_control; - - /* - * Fill in the mode and permission information for the jnode structure. - */ - node->st_mode = mode; - node->st_uid = geteuid(); - node->st_gid = getegid(); - - /* - * Now set all the times. - */ - - node->stat_atime = (time_t) tv.tv_sec; - node->stat_mtime = (time_t) tv.tv_sec; - node->stat_ctime = (time_t) tv.tv_sec; - - return (*node_control->node_initialize)( node, arg ); -} - int IMFS_initialize_support( rtems_filesystem_mount_table_entry_t *mt_entry, const void *data @@ -133,33 +87,6 @@ int IMFS_initialize_support( return 0; } -int IMFS_node_clone( rtems_filesystem_location_info_t *loc ) -{ - IMFS_jnode_t *node = loc->node_access; - - ++node->reference_count; - - return 0; -} - -void IMFS_node_destroy( IMFS_jnode_t *node ) -{ - IMFS_assert( node->reference_count == 0 ); - - (*node->control->node_destroy)( node ); -} - -void IMFS_node_free( const rtems_filesystem_location_info_t *loc ) -{ - IMFS_jnode_t *node = loc->node_access; - - --node->reference_count; - - if ( node->reference_count == 0 ) { - IMFS_node_destroy( node ); - } -} - static IMFS_jnode_t *IMFS_node_initialize_enosys( IMFS_jnode_t *node, void *arg @@ -178,22 +105,6 @@ IMFS_jnode_t *IMFS_node_initialize_default( return node; } -IMFS_jnode_t *IMFS_node_remove_default( - IMFS_jnode_t *node -) -{ - return node; -} - -void IMFS_node_destroy_default( IMFS_jnode_t *node ) -{ - if ( ( node->flags & IMFS_NODE_FLAG_NAME_ALLOCATED ) != 0 ) { - free( RTEMS_DECONST( char *, node->name ) ); - } - - free( node ); -} - const IMFS_mknod_control IMFS_mknod_control_enosys = { { .handlers = &rtems_filesystem_handlers_default, diff --git a/cpukit/libfs/src/imfs/imfs_stat.c b/cpukit/libfs/src/imfs/imfs_stat.c index c0298b1..cfbcbf1 100644 --- a/cpukit/libfs/src/imfs/imfs_stat.c +++ b/cpukit/libfs/src/imfs/imfs_stat.c @@ -23,6 +23,97 @@ #include "imfs.h" +#include <stdlib.h> + +IMFS_jnode_t *IMFS_initialize_node( + IMFS_jnode_t *node, + const IMFS_node_control *node_control, + const char *name, + size_t namelen, + mode_t mode, + void *arg +) +{ + struct timeval tv; + + if ( namelen > IMFS_NAME_MAX ) { + errno = ENAMETOOLONG; + + return NULL; + } + + gettimeofday( &tv, 0 ); + + /* + * Fill in the basic information + */ + node->name = name; + node->namelen = namelen; + node->reference_count = 1; + node->st_nlink = 1; + node->control = node_control; + + /* + * Fill in the mode and permission information for the jnode structure. + */ + node->st_mode = mode; + node->st_uid = geteuid(); + node->st_gid = getegid(); + + /* + * Now set all the times. + */ + + node->stat_atime = (time_t) tv.tv_sec; + node->stat_mtime = (time_t) tv.tv_sec; + node->stat_ctime = (time_t) tv.tv_sec; + + return (*node_control->node_initialize)( node, arg ); +} + +int IMFS_node_clone( rtems_filesystem_location_info_t *loc ) +{ + IMFS_jnode_t *node = loc->node_access; + + ++node->reference_count; + + return 0; +} + +void IMFS_node_destroy( IMFS_jnode_t *node ) +{ + IMFS_assert( node->reference_count == 0 ); + + (*node->control->node_destroy)( node ); +} + +void IMFS_node_free( const rtems_filesystem_location_info_t *loc ) +{ + IMFS_jnode_t *node = loc->node_access; + + --node->reference_count; + + if ( node->reference_count == 0 ) { + IMFS_node_destroy( node ); + } +} + +IMFS_jnode_t *IMFS_node_remove_default( + IMFS_jnode_t *node +) +{ + return node; +} + +void IMFS_node_destroy_default( IMFS_jnode_t *node ) +{ + if ( ( node->flags & IMFS_NODE_FLAG_NAME_ALLOCATED ) != 0 ) { + free( RTEMS_DECONST( char *, node->name ) ); + } + + free( node ); +} + int IMFS_stat( const rtems_filesystem_location_info_t *loc, struct stat *buf -- 1.8.4.5 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel