summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/imfs
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-02-08 19:43:09 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-02-12 20:53:36 +0100
commita9df9169882c564af6714bbf121c278092d3c51c (patch)
tree91a6f1b33100eacb6b700289612dbff956ca87df /cpukit/libfs/src/imfs
parentIMFS: Allow static initialization of FS info (diff)
downloadrtems-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.c78
-rw-r--r--cpukit/libfs/src/imfs/imfs.h21
-rw-r--r--cpukit/libfs/src/imfs/imfs_init.c2
-rw-r--r--cpukit/libfs/src/imfs/imfs_load_tar.c5
-rw-r--r--cpukit/libfs/src/imfs/imfs_make_generic_node.c10
-rw-r--r--cpukit/libfs/src/imfs/miniimfs_init.c74
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 );
-}