summaryrefslogtreecommitdiffstats
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
parenta2f5c7e1a70f88eec73fb15e2fcd2c111b52c0ea (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.
-rw-r--r--c/src/lib/libbsp/powerpc/beatnik/irq/irq_test_app.c1
-rw-r--r--cpukit/libfs/Makefile.am4
-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
-rw-r--r--cpukit/sapi/include/confdefs.h184
-rw-r--r--doc/user/conf.t320
-rw-r--r--testsuites/fstests/Makefile.am2
-rw-r--r--testsuites/fstests/configure.ac2
-rw-r--r--testsuites/fstests/fsimfsconfig01/Makefile.am19
-rw-r--r--testsuites/fstests/fsimfsconfig01/fsimfsconfig01.doc11
-rw-r--r--testsuites/fstests/fsimfsconfig01/fsimfsconfig01.scn2
-rw-r--r--testsuites/fstests/fsimfsconfig01/init.c139
-rw-r--r--testsuites/fstests/fsimfsconfig02/Makefile.am19
-rw-r--r--testsuites/fstests/fsimfsconfig02/fsimfsconfig02.doc11
-rw-r--r--testsuites/fstests/fsimfsconfig02/fsimfsconfig02.scn2
-rw-r--r--testsuites/fstests/fsimfsconfig02/init.c84
-rw-r--r--testsuites/fstests/fsimfsgeneric01/init.c16
-rw-r--r--testsuites/fstests/mimfs_support/fs_support.c2
-rw-r--r--testsuites/libtests/tar03/init.c9
-rw-r--r--testsuites/psxtests/psxfile01/main.c2
-rw-r--r--testsuites/psxtests/psximfs02/init.c2
-rw-r--r--testsuites/psxtests/psxmount/main.c2
-rw-r--r--testsuites/psxtests/psxreaddir/main.c2
-rw-r--r--testsuites/psxtests/psxstat/main.c2
-rw-r--r--testsuites/samples/iostream/system.h3
-rw-r--r--testsuites/sptests/sp47/init.c2
-rw-r--r--testsuites/sptests/sp48/init.c2
31 files changed, 728 insertions, 306 deletions
diff --git a/c/src/lib/libbsp/powerpc/beatnik/irq/irq_test_app.c b/c/src/lib/libbsp/powerpc/beatnik/irq/irq_test_app.c
index 72a43fa091..cb9ff146ad 100644
--- a/c/src/lib/libbsp/powerpc/beatnik/irq/irq_test_app.c
+++ b/c/src/lib/libbsp/powerpc/beatnik/irq/irq_test_app.c
@@ -36,7 +36,6 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
#include <confdefs.h>
#include <stdio.h>
diff --git a/cpukit/libfs/Makefile.am b/cpukit/libfs/Makefile.am
index 3c454e7154..802dfdb141 100644
--- a/cpukit/libfs/Makefile.am
+++ b/cpukit/libfs/Makefile.am
@@ -41,7 +41,7 @@ noinst_LIBRARIES += libimfs.a
libimfs_a_SOURCES =
libimfs_a_SOURCES += src/imfs/deviceio.c \
- src/imfs/fifoimfs_init.c src/imfs/imfs_chown.c src/imfs/imfs_config.c \
+ src/imfs/imfs_chown.c src/imfs/imfs_config.c \
src/imfs/imfs_creat.c src/imfs/imfs_directory.c \
src/imfs/imfs_eval.c src/imfs/imfs_fchmod.c \
src/imfs/imfs_fifo.c \
@@ -56,7 +56,7 @@ libimfs_a_SOURCES += src/imfs/deviceio.c \
src/imfs/imfs_rename.c src/imfs/imfs_rmnod.c \
src/imfs/imfs_stat.c src/imfs/imfs_stat_file.c src/imfs/imfs_symlink.c \
src/imfs/imfs_unmount.c src/imfs/imfs_utime.c src/imfs/ioman.c \
- src/imfs/imfs_memfile.c src/imfs/miniimfs_init.c src/imfs/imfs.h
+ src/imfs/imfs_memfile.c src/imfs/imfs.h
# POSIX FIFO/pipe
libimfs_a_SOURCES += src/pipe/fifo.c src/pipe/pipe.c src/pipe/pipe.h
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 );
-}
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index 211c6bc77f..6fb09512f6 100644
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -125,14 +125,6 @@ const rtems_libio_helper rtems_fs_init_helper =
#endif
#endif
-/*
- * If the application disables the filesystem, they will not need
- * a mount table, so do not produce one.
- */
-#ifdef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
- #define CONFIGURE_HAS_OWN_MOUNT_TABLE
-#endif
-
/**
* This macro defines the number of POSIX file descriptors allocated
* and managed by libio. These are the "integer" file descriptors that
@@ -257,7 +249,6 @@ const rtems_libio_helper rtems_fs_init_helper =
* Add file filesystems to the default filesystem table.
*
* List of available file systems. You can define as many as you like:
- * CONFIGURE_FILESYSTEM_MINIIMFS - MiniIMFS, use DEVFS now
* CONFIGURE_FILESYSTEM_IMFS - In Memory File System (IMFS)
* CONFIGURE_FILESYSTEM_DEVFS - Device File System (DSVFS)
* CONFIGURE_FILESYSTEM_TFTPFS - TFTP File System, networking enabled
@@ -271,10 +262,10 @@ const rtems_libio_helper rtems_fs_init_helper =
*
* - If nothing is defined the base file system is the IMFS.
*
- * - If CONFIGURE_APPLICATION_DISABLE_FILESYSTEM is defined all filesystem
- * are disabled by force and an empty DEVFS is created.
+ * - If CONFIGURE_APPLICATION_DISABLE_FILESYSTEM is defined all filesystems
+ * are disabled by force.
*
- * - If CONFIGURE_USE_DEV_AS_BASE_FILESYSTEM is defined all filesystem
+ * - If CONFIGURE_USE_DEV_AS_BASE_FILESYSTEM is defined all filesystems
* are disabled by force and DEVFS is defined.
*/
@@ -285,7 +276,6 @@ const rtems_libio_helper rtems_fs_init_helper =
* been disabled.
*/
#ifdef CONFIGURE_FILESYSTEM_ALL
- #define CONFIGURE_FILESYSTEM_MINIIMFS
#define CONFIGURE_FILESYSTEM_IMFS
#define CONFIGURE_FILESYSTEM_DEVFS
#define CONFIGURE_FILESYSTEM_TFTPFS
@@ -301,23 +291,19 @@ const rtems_libio_helper rtems_fs_init_helper =
* configured other filesystem parameters.
*/
#if defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM)
- #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM) || \
- defined(CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM)
- #error "Filesystem disabled but a base filesystem configured."
+ #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
+ #error "Filesystem disabled and a base filesystem configured."
#endif
- #if defined(CONFIGURE_FILESYSTEM_MINIIMFS) || \
- defined(CONFIGURE_FILESYSTEM_IMFS) || \
- defined(CONFIGURE_FILESYSTEM_DEVFS) || \
- defined(CONFIGURE_FILESYSTEM_TFTPFS) || \
- defined(CONFIGURE_FILESYSTEM_FTPFS) || \
- defined(CONFIGURE_FILESYSTEM_NFS) || \
- defined(CONFIGURE_FILESYSTEM_DOSFS) || \
- defined(CONFIGURE_FILESYSTEM_RFS) || \
- defined(CONFIGURE_FILESYSTEM_JFFS2)
- #error "Configured filesystems but root filesystem was not IMFS!"
- #error "Filesystems could be disabled, DEVFS is root, or"
- #error " miniIMFS is root!"
+ #if defined(CONFIGURE_FILESYSTEM_IMFS) || \
+ defined(CONFIGURE_FILESYSTEM_DEVFS) || \
+ defined(CONFIGURE_FILESYSTEM_TFTPFS) || \
+ defined(CONFIGURE_FILESYSTEM_FTPFS) || \
+ defined(CONFIGURE_FILESYSTEM_NFS) || \
+ defined(CONFIGURE_FILESYSTEM_DOSFS) || \
+ defined(CONFIGURE_FILESYSTEM_RFS) || \
+ defined(CONFIGURE_FILESYSTEM_JFFS2)
+ #error "Filesystem disabled and a filesystem configured."
#endif
#endif
@@ -328,10 +314,6 @@ const rtems_libio_helper rtems_fs_init_helper =
#if !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM)
#if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
#define CONFIGURE_FILESYSTEM_DEVFS
- #elif defined(CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM)
- #define CONFIGURE_FILESYSTEM_MINIIMFS
- #elif !defined(CONFIGURE_FILESYSTEM_IMFS)
- #define CONFIGURE_FILESYSTEM_IMFS
#endif
#endif
@@ -355,28 +337,12 @@ const rtems_libio_helper rtems_fs_init_helper =
#endif
/**
- * This defines the miniIMFS file system table entry.
- */
-#if !defined(CONFIGURE_FILESYSTEM_ENTRY_miniIMFS) && \
- defined(CONFIGURE_FILESYSTEM_MINIIMFS)
- #define CONFIGURE_FILESYSTEM_ENTRY_miniIMFS \
- { RTEMS_FILESYSTEM_TYPE_MINIIMFS, miniIMFS_initialize }
-#endif
-#endif
-
-#ifndef RTEMS_SCHEDSIM
-/**
* This defines the IMFS file system table entry.
*/
#if !defined(CONFIGURE_FILESYSTEM_ENTRY_IMFS) && \
- defined(CONFIGURE_FILESYSTEM_IMFS)
- #if CONFIGURE_MAXIMUM_FIFOS > 0 || CONFIGURE_MAXIMUM_PIPES > 0
- #define CONFIGURE_FILESYSTEM_ENTRY_IMFS \
- { RTEMS_FILESYSTEM_TYPE_IMFS, fifoIMFS_initialize }
- #else
- #define CONFIGURE_FILESYSTEM_ENTRY_IMFS \
- { RTEMS_FILESYSTEM_TYPE_IMFS, IMFS_initialize }
- #endif
+ defined(CONFIGURE_FILESYSTEM_IMFS)
+ #define CONFIGURE_FILESYSTEM_ENTRY_IMFS \
+ { RTEMS_FILESYSTEM_TYPE_IMFS, IMFS_initialize }
#endif
#endif
@@ -506,28 +472,27 @@ const rtems_libio_helper rtems_fs_init_helper =
#include <rtems/devfs.h>
#endif
-#ifndef RTEMS_SCHEDSIM
- #if defined(CONFIGURE_FILESYSTEM_IMFS) || \
- defined(CONFIGURE_FILESYSTEM_MINIIMFS)
- int imfs_rq_memfile_bytes_per_block = CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK;
- #endif
-#endif
-
/**
* Table termination record.
*/
#define CONFIGURE_FILESYSTEM_NULL { NULL, NULL }
#ifndef RTEMS_SCHEDSIM
+ #if !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM) && \
+ !defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
+ int imfs_rq_memfile_bytes_per_block =
+ CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK;
+ #endif
+
/**
* The default file system table. Must be terminated with the NULL entry if
* you provide your own.
*/
- #ifndef CONFIGURE_HAS_OWN_FILESYSTEM_TABLE
+ #if !defined(CONFIGURE_HAS_OWN_FILESYSTEM_TABLE) && \
+ !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM)
const rtems_filesystem_table_t rtems_filesystem_table[] = {
- #if defined(CONFIGURE_FILESYSTEM_MINIIMFS) && \
- defined(CONFIGURE_FILESYSTEM_ENTRY_miniIMFS)
- CONFIGURE_FILESYSTEM_ENTRY_miniIMFS,
+ #if !defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
+ { "/", IMFS_initialize_support },
#endif
#if defined(CONFIGURE_FILESYSTEM_IMFS) && \
defined(CONFIGURE_FILESYSTEM_ENTRY_IMFS)
@@ -565,30 +530,115 @@ const rtems_libio_helper rtems_fs_init_helper =
};
#endif
- #ifndef CONFIGURE_HAS_OWN_MOUNT_TABLE
+ #if !defined(CONFIGURE_HAS_OWN_MOUNT_TABLE) && \
+ !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM)
#if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
static devFS_node devFS_root_filesystem_nodes [CONFIGURE_MAXIMUM_DEVICES];
static const devFS_data devFS_root_filesystem_data = {
devFS_root_filesystem_nodes,
CONFIGURE_MAXIMUM_DEVICES
};
+ #else
+ static IMFS_fs_info_t _Configure_IMFS_fs_info;
+
+ static const rtems_filesystem_operations_table _Configure_IMFS_ops = {
+ rtems_filesystem_default_lock,
+ rtems_filesystem_default_unlock,
+ IMFS_eval_path,
+ #ifdef CONFIGURE_IMFS_DISABLE_LINK
+ rtems_filesystem_default_link,
+ #else
+ IMFS_link,
+ #endif
+ rtems_filesystem_default_are_nodes_equal,
+ #ifdef CONFIGURE_IMFS_DISABLE_MKNOD
+ rtems_filesystem_default_mknod,
+ #else
+ IMFS_mknod,
+ #endif
+ #ifdef CONFIGURE_IMFS_DISABLE_RMNOD
+ rtems_filesystem_default_rmnod,
+ #else
+ IMFS_rmnod,
+ #endif
+ #ifdef CONFIGURE_IMFS_DISABLE_FCHMOD
+ rtems_filesystem_default_fchmod,
+ #else
+ IMFS_fchmod,
+ #endif
+ #ifdef CONFIGURE_IMFS_DISABLE_CHOWN
+ rtems_filesystem_default_chown,
+ #else
+ IMFS_chown,
+ #endif
+ IMFS_node_clone,
+ IMFS_node_free,
+ #ifdef CONFIGURE_IMFS_DISABLE_MOUNT
+ rtems_filesystem_default_mount,
+ #else
+ IMFS_mount,
+ #endif
+ #ifdef CONFIGURE_IMFS_DISABLE_UNMOUNT
+ rtems_filesystem_default_unmount,
+ #else
+ IMFS_unmount,
+ #endif
+ rtems_filesystem_default_fsunmount,
+ #ifdef CONFIGURE_IMFS_DISABLE_UTIME
+ rtems_filesystem_default_utime,
+ #else
+ IMFS_utime,
+ #endif
+ #ifdef CONFIGURE_IMFS_DISABLE_SYMLINK
+ rtems_filesystem_default_symlink,
+ #else
+ IMFS_symlink,
+ #endif
+ #ifdef CONFIGURE_IMFS_DISABLE_READLINK
+ rtems_filesystem_default_readlink,
+ #else
+ IMFS_readlink,
+ #endif
+ #ifdef CONFIGURE_IMFS_DISABLE_RENAME
+ rtems_filesystem_default_rename,
+ #else
+ IMFS_rename,
+ #endif
+ rtems_filesystem_default_statvfs
+ };
+
+ static const IMFS_mknod_controls _Configure_IMFS_mknod_controls = {
+ &IMFS_mknod_control_directory,
+ &IMFS_mknod_control_device,
+ &IMFS_mknod_control_memfile,
+ #if CONFIGURE_MAXIMUM_FIFOS > 0 || CONFIGURE_MAXIMUM_PIPES > 0
+ &IMFS_mknod_control_fifo
+ #else
+ &IMFS_mknod_control_enosys
+ #endif
+ };
+
+ static const IMFS_mount_data _Configure_IMFS_mount_data = {
+ &_Configure_IMFS_fs_info,
+ &_Configure_IMFS_ops,
+ &_Configure_IMFS_mknod_controls
+ };
#endif
+
const rtems_filesystem_mount_configuration
rtems_filesystem_root_configuration = {
NULL,
NULL,
#if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
RTEMS_FILESYSTEM_TYPE_DEVFS,
- #elif defined(CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM)
- RTEMS_FILESYSTEM_TYPE_MINIIMFS,
#else
- RTEMS_FILESYSTEM_TYPE_IMFS,
+ "/",
#endif
RTEMS_FILESYSTEM_READ_WRITE,
#if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
&devFS_root_filesystem_data
#else
- NULL
+ &_Configure_IMFS_mount_data
#endif
};
#endif
diff --git a/doc/user/conf.t b/doc/user/conf.t
index 7afe09cd26..fd986e2362 100644
--- a/doc/user/conf.t
+++ b/doc/user/conf.t
@@ -2577,40 +2577,6 @@ None.
@c XXX - Please provide an example
@c
-@c === CONFIGURE_USE_MINIIMFS_AS_BASE_SYSTEM ===
-@c
-@subsection Configure miniIMFS as Root File System
-
-@findex CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM}
-
-@item DATA TYPE:
-Boolean feature macro.
-
-@item RANGE:
-Defined or undefined.
-
-@item DEFAULT VALUE:
-This is not defined by default. If no other root file system
-configuration parameters are specified, the IMFS will be used as the
-root file system.
-
-@end table
-
-@subheading DESCRIPTION:
-This configuration parameter is defined if the application wishes to use
-the reduced functionality miniIMFS as the root filesystem. This reduced
-version of the full IMFS does not include the capability to mount other
-file system types, but it does support directories, device nodes, and
-symbolic links.
-
-@subheading NOTES:
-The miniIMFS nodes and is smaller in executable code size than the full IMFS.
-
-@c
@c === CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM ===
@c
@subsection Configure devFS as Root File System
@@ -2711,6 +2677,292 @@ infrastructure necessary to support @code{printf()}.
None.
@c
+@c === CONFIGURE_IMFS_DISABLE_CHOWN ===
+@c
+@subsection Disable change owner support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_CHOWN
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_CHOWN}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to change the
+owner is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_FCHMOD ===
+@c
+@subsection Disable change mode support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_FCHMOD
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_FCHMOD}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to change the
+mode is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_UTIME ===
+@c
+@subsection Disable change times support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_UTIME
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_UTIME}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to change times
+is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_LINK ===
+@c
+@subsection Disable create hard link support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_LINK
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_LINK}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to create hard
+links is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_SYMLINK ===
+@c
+@subsection Disable create symbolic link support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_SYMLINK
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_SYMLINK}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to create
+symbolic links is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_READLINK ===
+@c
+@subsection Disable read symbolic link support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_READLINK
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_READLINK}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to read symbolic
+links is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_RENAME ===
+@c
+@subsection Disable rename support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_RENAME
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_RENAME}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to rename nodes
+is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_MOUNT ===
+@c
+@subsection Disable mount support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_MOUNT
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_MOUNT}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to mount other
+file systems is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_UNMOUNT ===
+@c
+@subsection Disable unmount support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_UNMOUNT
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_UNMOUNT}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to unmount file
+systems is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_MKNOD ===
+@c
+@subsection Disable make nodes support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_MKNOD
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_MKNOD}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to make
+directories, devices, regular files and FIFOs is disabled in the root IMFS.
+
+@c
+@c === CONFIGURE_IMFS_DISABLE_RMNOD ===
+@c
+@subsection Disable remove nodes support of root IMFS
+
+@findex CONFIGURE_IMFS_DISABLE_RMNOD
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_IMFS_DISABLE_RMNOD}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default.
+
+@end table
+
+@subheading DESCRIPTION:
+In case this configuration option is defined, then the support to remove nodes
+is disabled in the root IMFS.
+
+@c
@c === Block Device Cache Configuration ===
@c
@section Block Device Cache Configuration
diff --git a/testsuites/fstests/Makefile.am b/testsuites/fstests/Makefile.am
index 404966cb24..6b01b20184 100644
--- a/testsuites/fstests/Makefile.am
+++ b/testsuites/fstests/Makefile.am
@@ -1,6 +1,8 @@
ACLOCAL_AMFLAGS = -I ../aclocal
_SUBDIRS =
+_SUBDIRS += fsimfsconfig02
+_SUBDIRS += fsimfsconfig01
_SUBDIRS += fsdosfsname01
_SUBDIRS += fsdosfswrite01
_SUBDIRS += fsdosfsformat01
diff --git a/testsuites/fstests/configure.ac b/testsuites/fstests/configure.ac
index fca2fdfa84..87b8961746 100644
--- a/testsuites/fstests/configure.ac
+++ b/testsuites/fstests/configure.ac
@@ -77,6 +77,8 @@ AC_CHECK_SIZEOF([blkcnt_t])
# Explicitly list all Makefiles here
AC_CONFIG_FILES([Makefile
+fsimfsconfig02/Makefile
+fsimfsconfig01/Makefile
fsdosfsname01/Makefile
fsdosfswrite01/Makefile
fsdosfsformat01/Makefile
diff --git a/testsuites/fstests/fsimfsconfig01/Makefile.am b/testsuites/fstests/fsimfsconfig01/Makefile.am
new file mode 100644
index 0000000000..0787dbe8d8
--- /dev/null
+++ b/testsuites/fstests/fsimfsconfig01/Makefile.am
@@ -0,0 +1,19 @@
+rtems_tests_PROGRAMS = fsimfsconfig01
+fsimfsconfig01_SOURCES = init.c
+
+dist_rtems_tests_DATA = fsimfsconfig01.scn fsimfsconfig01.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(fsimfsconfig01_OBJECTS)
+LINK_LIBS = $(fsimfsconfig01_LDLIBS)
+
+fsimfsconfig01$(EXEEXT): $(fsimfsconfig01_OBJECTS) $(fsimfsconfig01_DEPENDENCIES)
+ @rm -f fsimfsconfig01$(EXEEXT)
+ $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/fstests/fsimfsconfig01/fsimfsconfig01.doc b/testsuites/fstests/fsimfsconfig01/fsimfsconfig01.doc
new file mode 100644
index 0000000000..d243512e12
--- /dev/null
+++ b/testsuites/fstests/fsimfsconfig01/fsimfsconfig01.doc
@@ -0,0 +1,11 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: fsimfsconfig01
+
+directives:
+
+ TBD
+
+concepts:
+
+ - Ensure that the IMFS configuration defines work.
diff --git a/testsuites/fstests/fsimfsconfig01/fsimfsconfig01.scn b/testsuites/fstests/fsimfsconfig01/fsimfsconfig01.scn
new file mode 100644
index 0000000000..145048bf40
--- /dev/null
+++ b/testsuites/fstests/fsimfsconfig01/fsimfsconfig01.scn
@@ -0,0 +1,2 @@
+*** BEGIN OF TEST FSIMFSCONFIG 1 ***
+*** END OF TEST FSIMFSCONFIG 1 ***
diff --git a/testsuites/fstests/fsimfsconfig01/init.c b/testsuites/fstests/fsimfsconfig01/init.c
new file mode 100644
index 0000000000..3f842c0451
--- /dev/null
+++ b/testsuites/fstests/fsimfsconfig01/init.c
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+ #include "config.h"
+#endif
+
+#include "tmacros.h"
+
+#include <sys/stat.h>
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <utime.h>
+
+#include <rtems/imfs.h>
+#include <rtems/libio.h>
+
+const char rtems_test_name[] = "FSIMFSCONFIG 1";
+
+static const IMFS_node_control node_control = IMFS_GENERIC_INITIALIZER(
+ &rtems_filesystem_handlers_default,
+ IMFS_node_initialize_generic,
+ IMFS_node_destroy_default
+);
+
+static void Init(rtems_task_argument arg)
+{
+ struct utimbuf times;
+ const char *generic = "generic";
+ const char *mnt = "mnt";
+ int rv;
+
+ TEST_BEGIN();
+
+ rv = IMFS_make_generic_node(
+ generic,
+ S_IFCHR | S_IRWXU | S_IRWXG | S_IRWXO,
+ &node_control,
+ NULL
+ );
+ rtems_test_assert(rv == 0);
+
+ errno = 0;
+ rv = chown(generic, 0, 0);
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ errno = 0;
+ rv = chmod(generic, 0);
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ errno = 0;
+ rv = link(generic, "link");
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ rv = mkdir(mnt, S_IRWXU);
+ rtems_test_assert(rv == 0);
+
+ errno = 0;
+ rv = mount(
+ "",
+ mnt,
+ RTEMS_FILESYSTEM_TYPE_IMFS,
+ RTEMS_FILESYSTEM_READ_ONLY,
+ NULL
+ );
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ errno = 0;
+ rv = rename(generic, "new");
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ errno = 0;
+ rv = unlink(generic);
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ errno = 0;
+ rv = symlink(generic, "link");
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ errno = 0;
+ rv = utime(generic, &times);
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ TEST_END();
+ rtems_test_exit(0);
+}
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_FILESYSTEM_IMFS
+
+#define CONFIGURE_IMFS_DISABLE_CHOWN
+#define CONFIGURE_IMFS_DISABLE_FCHMOD
+#define CONFIGURE_IMFS_DISABLE_LINK
+
+#if 0
+/*
+ * This would lead to a fatal error since rtems_filesystem_initialize() creates
+ * a "/dev" directory.
+ */
+#define CONFIGURE_IMFS_DISABLE_MKNOD
+#endif
+
+#define CONFIGURE_IMFS_DISABLE_MOUNT
+#define CONFIGURE_IMFS_DISABLE_RENAME
+#define CONFIGURE_IMFS_DISABLE_RMNOD
+#define CONFIGURE_IMFS_DISABLE_SYMLINK
+#define CONFIGURE_IMFS_DISABLE_UTIME
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/fstests/fsimfsconfig02/Makefile.am b/testsuites/fstests/fsimfsconfig02/Makefile.am
new file mode 100644
index 0000000000..9567eea8ec
--- /dev/null
+++ b/testsuites/fstests/fsimfsconfig02/Makefile.am
@@ -0,0 +1,19 @@
+rtems_tests_PROGRAMS = fsimfsconfig02
+fsimfsconfig02_SOURCES = init.c
+
+dist_rtems_tests_DATA = fsimfsconfig02.scn fsimfsconfig02.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(fsimfsconfig02_OBJECTS)
+LINK_LIBS = $(fsimfsconfig02_LDLIBS)
+
+fsimfsconfig02$(EXEEXT): $(fsimfsconfig02_OBJECTS) $(fsimfsconfig02_DEPENDENCIES)
+ @rm -f fsimfsconfig02$(EXEEXT)
+ $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/fstests/fsimfsconfig02/fsimfsconfig02.doc b/testsuites/fstests/fsimfsconfig02/fsimfsconfig02.doc
new file mode 100644
index 0000000000..3693513eea
--- /dev/null
+++ b/testsuites/fstests/fsimfsconfig02/fsimfsconfig02.doc
@@ -0,0 +1,11 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: fsimfsconfig02
+
+directives:
+
+ TBD
+
+concepts:
+
+ - Ensure that the IMFS configuration defines work.
diff --git a/testsuites/fstests/fsimfsconfig02/fsimfsconfig02.scn b/testsuites/fstests/fsimfsconfig02/fsimfsconfig02.scn
new file mode 100644
index 0000000000..c89a4a219a
--- /dev/null
+++ b/testsuites/fstests/fsimfsconfig02/fsimfsconfig02.scn
@@ -0,0 +1,2 @@
+*** BEGIN OF TEST FSIMFSCONFIG 2 ***
+*** END OF TEST FSIMFSCONFIG 2 ***
diff --git a/testsuites/fstests/fsimfsconfig02/init.c b/testsuites/fstests/fsimfsconfig02/init.c
new file mode 100644
index 0000000000..35f9c83b58
--- /dev/null
+++ b/testsuites/fstests/fsimfsconfig02/init.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+ #include "config.h"
+#endif
+
+#include "tmacros.h"
+
+#include <sys/stat.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include <rtems/imfs.h>
+#include <rtems/libio.h>
+
+const char rtems_test_name[] = "FSIMFSCONFIG 2";
+
+static void Init(rtems_task_argument arg)
+{
+ const char *mnt = "mnt";
+ const char *link = "link";
+ char buf[1];
+ int rv;
+
+ TEST_BEGIN();
+
+ rv = mkdir(mnt, S_IRWXU);
+ rtems_test_assert(rv == 0);
+
+ rv = mount(
+ "",
+ mnt,
+ RTEMS_FILESYSTEM_TYPE_IMFS,
+ RTEMS_FILESYSTEM_READ_ONLY,
+ NULL
+ );
+ rtems_test_assert(rv == 0);
+
+ errno = 0;
+ rv = unmount(mnt);
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ rv = symlink(mnt, link);
+ rtems_test_assert(rv == 0);
+
+ errno = 0;
+ rv = readlink(link, &buf[0], sizeof(buf));
+ rtems_test_assert(rv == -1);
+ rtems_test_assert(errno == ENOTSUP);
+
+ TEST_END();
+ rtems_test_exit(0);
+}
+
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_FILESYSTEM_IMFS
+
+#define CONFIGURE_IMFS_DISABLE_READLINK
+#define CONFIGURE_IMFS_DISABLE_UNMOUNT
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/fstests/fsimfsgeneric01/init.c b/testsuites/fstests/fsimfsgeneric01/init.c
index 44d75c5fad..6cc6c15436 100644
--- a/testsuites/fstests/fsimfsgeneric01/init.c
+++ b/testsuites/fstests/fsimfsgeneric01/init.c
@@ -396,6 +396,13 @@ static const IMFS_node_control node_initialization_error_control = {
.node_destroy = node_destroy_inhibited
};
+static const rtems_filesystem_operations_table *imfs_ops;
+
+static int other_clone(rtems_filesystem_location_info_t *loc)
+{
+ return (*imfs_ops->clonenod_h)(loc);
+}
+
static void test_imfs_make_generic_node_errors(void)
{
int rv = 0;
@@ -403,7 +410,7 @@ static void test_imfs_make_generic_node_errors(void)
rtems_chain_control *chain = &rtems_filesystem_mount_table;
rtems_filesystem_mount_table_entry_t *mt_entry =
(rtems_filesystem_mount_table_entry_t *) rtems_chain_first(chain);
- const char *type = mt_entry->type;
+ rtems_filesystem_operations_table other_ops;
void *opaque = NULL;
rtems_resource_snapshot before;
@@ -421,14 +428,17 @@ static void test_imfs_make_generic_node_errors(void)
rtems_test_assert(rtems_resource_snapshot_check(&before));
errno = 0;
- mt_entry->type = "XXX";
+ imfs_ops = mt_entry->ops;
+ other_ops = *imfs_ops;
+ other_ops.clonenod_h = other_clone;
+ mt_entry->ops = &other_ops;
rv = IMFS_make_generic_node(
path,
S_IFCHR | S_IRWXU | S_IRWXG | S_IRWXO,
&node_control,
NULL
);
- mt_entry->type = type;
+ mt_entry->ops = imfs_ops;
rtems_test_assert(rv == -1);
rtems_test_assert(errno == ENOTSUP);
rtems_test_assert(rtems_resource_snapshot_check(&before));
diff --git a/testsuites/fstests/mimfs_support/fs_support.c b/testsuites/fstests/mimfs_support/fs_support.c
index 849d856bea..29ccfd371c 100644
--- a/testsuites/fstests/mimfs_support/fs_support.c
+++ b/testsuites/fstests/mimfs_support/fs_support.c
@@ -64,5 +64,7 @@ test_shutdown_filesystem (void)
#define CONFIGURE_INIT_TASK_STACK_SIZE (16 * 1024)
#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS 1
+#define CONFIGURE_FILESYSTEM_IMFS
+
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
diff --git a/testsuites/libtests/tar03/init.c b/testsuites/libtests/tar03/init.c
index 3e2b5d3e68..72e95ecd2f 100644
--- a/testsuites/libtests/tar03/init.c
+++ b/testsuites/libtests/tar03/init.c
@@ -34,13 +34,6 @@ void test_tarfs_error(void)
printf ("error: untar failed returned %d\n", sc);
rtems_test_exit(1);
}
-
- puts("Loading tarfs image with miniIMFS as root filesystem - ERROR");
- sc = rtems_tarfs_load("/",(void *)rtems_task_create, 72);
- if (sc != -1) {
- printf ("error: untar failed returned %d\n", sc);
- rtems_test_exit(1);
- }
}
rtems_task Init(
@@ -65,8 +58,6 @@ rtems_task Init(
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
-
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
/* end of file */
diff --git a/testsuites/psxtests/psxfile01/main.c b/testsuites/psxtests/psxfile01/main.c
index a6ad029e05..554f8e96f8 100644
--- a/testsuites/psxtests/psxfile01/main.c
+++ b/testsuites/psxtests/psxfile01/main.c
@@ -35,6 +35,8 @@ rtems_task Init(
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 6
+#define CONFIGURE_FILESYSTEM_IMFS
+
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_INIT_TASK_STACK_SIZE (2 * RTEMS_MINIMUM_STACK_SIZE)
diff --git a/testsuites/psxtests/psximfs02/init.c b/testsuites/psxtests/psximfs02/init.c
index 00a171fd99..d372a6f11b 100644
--- a/testsuites/psxtests/psximfs02/init.c
+++ b/testsuites/psxtests/psximfs02/init.c
@@ -208,6 +208,8 @@ rtems_task Init(
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_FILESYSTEM_IMFS
+
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK 15
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 4
diff --git a/testsuites/psxtests/psxmount/main.c b/testsuites/psxtests/psxmount/main.c
index 2e32a291ff..a723b87d4a 100644
--- a/testsuites/psxtests/psxmount/main.c
+++ b/testsuites/psxtests/psxmount/main.c
@@ -33,6 +33,8 @@ rtems_task Init(
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 10
+#define CONFIGURE_FILESYSTEM_IMFS
+
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS 1
diff --git a/testsuites/psxtests/psxreaddir/main.c b/testsuites/psxtests/psxreaddir/main.c
index 90880b0b6b..176d264978 100644
--- a/testsuites/psxtests/psxreaddir/main.c
+++ b/testsuites/psxtests/psxreaddir/main.c
@@ -31,6 +31,8 @@ rtems_task Init(
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 10
+#define CONFIGURE_FILESYSTEM_IMFS
+
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/psxtests/psxstat/main.c b/testsuites/psxtests/psxstat/main.c
index 19ed8d47c8..07fde7f9b5 100644
--- a/testsuites/psxtests/psxstat/main.c
+++ b/testsuites/psxtests/psxstat/main.c
@@ -35,6 +35,8 @@ rtems_task Init(
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 10
+#define CONFIGURE_FILESYSTEM_IMFS
+
#define CONFIGURE_MAXIMUM_TASKS 1
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/samples/iostream/system.h b/testsuites/samples/iostream/system.h
index 7256f8fce7..62f7d535ec 100644
--- a/testsuites/samples/iostream/system.h
+++ b/testsuites/samples/iostream/system.h
@@ -31,9 +31,6 @@
#define CONFIGURE_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2)
#define CONFIGURE_EXTRA_TASK_STACKS RTEMS_MINIMUM_STACK_SIZE
-/* Only remove when this macro is removed from confdefs.h. It tests it. */
-#define CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
-
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
#include <rtems/confdefs.h>
diff --git a/testsuites/sptests/sp47/init.c b/testsuites/sptests/sp47/init.c
index 1a0d569e0b..5d28303f19 100644
--- a/testsuites/sptests/sp47/init.c
+++ b/testsuites/sptests/sp47/init.c
@@ -74,7 +74,5 @@ rtems_task Init(rtems_task_argument ignored)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
-
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
diff --git a/testsuites/sptests/sp48/init.c b/testsuites/sptests/sp48/init.c
index 701aa17035..53d8245c23 100644
--- a/testsuites/sptests/sp48/init.c
+++ b/testsuites/sptests/sp48/init.c
@@ -102,7 +102,5 @@ rtems_task Init(rtems_task_argument ignored)
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
-#define CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
-
#define CONFIGURE_INIT
#include <rtems/confdefs.h>