diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-02-08 19:43:09 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-02-12 20:53:36 +0100 |
commit | a9df9169882c564af6714bbf121c278092d3c51c (patch) | |
tree | 91a6f1b33100eacb6b700289612dbff956ca87df /cpukit/libfs/src/imfs | |
parent | IMFS: Allow static initialization of FS info (diff) | |
download | rtems-a9df9169882c564af6714bbf121c278092d3c51c.tar.bz2 |
IMFS: Add fine grained configuration
Remove miniIMFS. Statically initialize the root IMFS.
Add configuration options to disable individual
features of the root IMFS, e.g.
o CONFIGURE_IMFS_DISABLE_CHOWN,
o CONFIGURE_IMFS_DISABLE_FCHMOD,
o CONFIGURE_IMFS_DISABLE_LINK,
o CONFIGURE_IMFS_DISABLE_MKNOD,
o CONFIGURE_IMFS_DISABLE_MOUNT,
o CONFIGURE_IMFS_DISABLE_READLINK,
o CONFIGURE_IMFS_DISABLE_RENAME,
o CONFIGURE_IMFS_DISABLE_RMNOD,
o CONFIGURE_IMFS_DISABLE_SYMLINK,
o CONFIGURE_IMFS_DISABLE_UNMOUNT, and
o CONFIGURE_IMFS_DISABLE_UTIME.
Diffstat (limited to 'cpukit/libfs/src/imfs')
-rw-r--r-- | cpukit/libfs/src/imfs/fifoimfs_init.c | 78 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs.h | 21 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_init.c | 2 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_load_tar.c | 5 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_make_generic_node.c | 10 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/miniimfs_init.c | 74 |
6 files changed, 7 insertions, 183 deletions
diff --git a/cpukit/libfs/src/imfs/fifoimfs_init.c b/cpukit/libfs/src/imfs/fifoimfs_init.c deleted file mode 100644 index 4063557739..0000000000 --- a/cpukit/libfs/src/imfs/fifoimfs_init.c +++ /dev/null @@ -1,78 +0,0 @@ -/** - * @file - * - * @ingroup LibFSIMFS - * - * @brief IMFS without fifo support initialization. - */ - -/* - * Copyright (c) 2010 - * embedded brains GmbH - * Obere Lagerstr. 30 - * D-82178 Puchheim - * Germany - * <rtems@embedded-brains.de> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#if HAVE_CONFIG_H - #include "config.h" -#endif - -#include "imfs.h" - -#include <stdlib.h> - -#include <rtems/seterr.h> - -const rtems_filesystem_operations_table fifoIMFS_ops = { - .lock_h = rtems_filesystem_default_lock, - .unlock_h = rtems_filesystem_default_unlock, - .eval_path_h = IMFS_eval_path, - .link_h = IMFS_link, - .are_nodes_equal_h = rtems_filesystem_default_are_nodes_equal, - .mknod_h = IMFS_mknod, - .rmnod_h = IMFS_rmnod, - .fchmod_h = IMFS_fchmod, - .chown_h = IMFS_chown, - .clonenod_h = IMFS_node_clone, - .freenod_h = IMFS_node_free, - .mount_h = IMFS_mount, - .unmount_h = IMFS_unmount, - .fsunmount_me_h = IMFS_fsunmount, - .utime_h = IMFS_utime, - .symlink_h = IMFS_symlink, - .readlink_h = IMFS_readlink, - .rename_h = IMFS_rename, - .statvfs_h = rtems_filesystem_default_statvfs -}; - -static const IMFS_mknod_controls IMFS_fifo_mknod_controls = { - .directory = &IMFS_mknod_control_directory, - .device = &IMFS_mknod_control_device, - .file = &IMFS_mknod_control_memfile, - .fifo = &IMFS_mknod_control_fifo -}; - -int fifoIMFS_initialize( - rtems_filesystem_mount_table_entry_t *mt_entry, - const void *data -) -{ - IMFS_fs_info_t *fs_info = calloc( 1, sizeof( *fs_info ) ); - IMFS_mount_data mount_data = { - .fs_info = fs_info, - .ops = &fifoIMFS_ops, - .mknod_controls = &IMFS_fifo_mknod_controls - }; - - if ( fs_info == NULL ) { - rtems_set_errno_and_return_minus_one( ENOMEM ); - } - - return IMFS_initialize_support( mt_entry, &mount_data ); -} diff --git a/cpukit/libfs/src/imfs/imfs.h b/cpukit/libfs/src/imfs/imfs.h index 00fc1795a6..c03257a0fa 100644 --- a/cpukit/libfs/src/imfs/imfs.h +++ b/cpukit/libfs/src/imfs/imfs.h @@ -391,10 +391,6 @@ extern const IMFS_node_control IMFS_node_control_linfile; extern const IMFS_mknod_control IMFS_mknod_control_fifo; extern const IMFS_mknod_control IMFS_mknod_control_enosys; -extern const rtems_filesystem_operations_table miniIMFS_ops; -extern const rtems_filesystem_operations_table IMFS_ops; -extern const rtems_filesystem_operations_table fifoIMFS_ops; - extern const rtems_filesystem_limits_and_options_t IMFS_LIMITS_AND_OPTIONS; /* @@ -406,16 +402,6 @@ extern int IMFS_initialize( const void *data ); -extern int fifoIMFS_initialize( - rtems_filesystem_mount_table_entry_t *mt_entry, - const void *data -); - -extern int miniIMFS_initialize( - rtems_filesystem_mount_table_entry_t *mt_entry, - const void *data -); - extern int IMFS_initialize_support( rtems_filesystem_mount_table_entry_t *mt_entry, const void *data @@ -586,9 +572,12 @@ extern IMFS_jnode_t *IMFS_create_node( void *arg ); -extern bool IMFS_is_imfs_instance( +static inline bool IMFS_is_imfs_instance( const rtems_filesystem_location_info_t *loc -); +) +{ + return loc->mt_entry->ops->clonenod_h == IMFS_node_clone; +} /** @} */ diff --git a/cpukit/libfs/src/imfs/imfs_init.c b/cpukit/libfs/src/imfs/imfs_init.c index e82490fac9..bbab2cb3e1 100644 --- a/cpukit/libfs/src/imfs/imfs_init.c +++ b/cpukit/libfs/src/imfs/imfs_init.c @@ -25,7 +25,7 @@ #include <rtems/seterr.h> -const rtems_filesystem_operations_table IMFS_ops = { +static const rtems_filesystem_operations_table IMFS_ops = { .lock_h = rtems_filesystem_default_lock, .unlock_h = rtems_filesystem_default_unlock, .eval_path_h = IMFS_eval_path, diff --git a/cpukit/libfs/src/imfs/imfs_load_tar.c b/cpukit/libfs/src/imfs/imfs_load_tar.c index d303cd29eb..7228978094 100644 --- a/cpukit/libfs/src/imfs/imfs_load_tar.c +++ b/cpukit/libfs/src/imfs/imfs_load_tar.c @@ -58,10 +58,7 @@ int rtems_tarfs_load( RTEMS_FS_MAKE | RTEMS_FS_EXCLUSIVE ); - if ( - rootloc.mt_entry->ops != &IMFS_ops - && rootloc.mt_entry->ops != &fifoIMFS_ops - ) { + if ( !IMFS_is_imfs_instance( &rootloc ) ) { rv = -1; } diff --git a/cpukit/libfs/src/imfs/imfs_make_generic_node.c b/cpukit/libfs/src/imfs/imfs_make_generic_node.c index f302dda93f..aef21c9493 100644 --- a/cpukit/libfs/src/imfs/imfs_make_generic_node.c +++ b/cpukit/libfs/src/imfs/imfs_make_generic_node.c @@ -39,16 +39,6 @@ IMFS_jnode_t *IMFS_node_initialize_generic( return node; } -bool IMFS_is_imfs_instance( - const rtems_filesystem_location_info_t *loc -) -{ - const char *type = loc->mt_entry->type; - - return strcmp(type, RTEMS_FILESYSTEM_TYPE_IMFS) == 0 - || strcmp(type, RTEMS_FILESYSTEM_TYPE_MINIIMFS) == 0; -} - int IMFS_make_generic_node( const char *path, mode_t mode, diff --git a/cpukit/libfs/src/imfs/miniimfs_init.c b/cpukit/libfs/src/imfs/miniimfs_init.c deleted file mode 100644 index 7451c5eb0d..0000000000 --- a/cpukit/libfs/src/imfs/miniimfs_init.c +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @file - * - * @ingroup LibFSIMFS - * - * @brief Mini-IMFS initialization. - */ - -/* - * COPYRIGHT (c) 1989-1999. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#if HAVE_CONFIG_H - #include "config.h" -#endif - -#include "imfs.h" - -#include <stdlib.h> - -#include <rtems/seterr.h> - -const rtems_filesystem_operations_table miniIMFS_ops = { - .lock_h = rtems_filesystem_default_lock, - .unlock_h = rtems_filesystem_default_unlock, - .eval_path_h = IMFS_eval_path, - .link_h = rtems_filesystem_default_link, - .are_nodes_equal_h = rtems_filesystem_default_are_nodes_equal, - .mknod_h = IMFS_mknod, - .rmnod_h = IMFS_rmnod, - .fchmod_h = rtems_filesystem_default_fchmod, - .chown_h = rtems_filesystem_default_chown, - .clonenod_h = IMFS_node_clone, - .freenod_h = IMFS_node_free, - .mount_h = IMFS_mount, - .unmount_h = rtems_filesystem_default_unmount, - .fsunmount_me_h = rtems_filesystem_default_fsunmount, - .utime_h = rtems_filesystem_default_utime, - .symlink_h = rtems_filesystem_default_symlink, - .readlink_h = rtems_filesystem_default_readlink, - .rename_h = rtems_filesystem_default_rename, - .statvfs_h = rtems_filesystem_default_statvfs -}; - -static const IMFS_mknod_controls IMFS_mini_mknod_controls = { - .directory = &IMFS_mknod_control_directory, - .device = &IMFS_mknod_control_device, - .file = &IMFS_mknod_control_memfile, - .fifo = &IMFS_mknod_control_enosys -}; - -int miniIMFS_initialize( - rtems_filesystem_mount_table_entry_t *mt_entry, - const void *data -) -{ - IMFS_fs_info_t *fs_info = calloc( 1, sizeof( *fs_info ) ); - IMFS_mount_data mount_data = { - .fs_info = fs_info, - .ops = &miniIMFS_ops, - .mknod_controls = &IMFS_mini_mknod_controls - }; - - if ( fs_info == NULL ) { - rtems_set_errno_and_return_minus_one( ENOMEM ); - } - - return IMFS_initialize_support( mt_entry, &mount_data ); -} |