summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/imfs/imfs_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libfs/src/imfs/imfs_init.c')
-rw-r--r--cpukit/libfs/src/imfs/imfs_init.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/cpukit/libfs/src/imfs/imfs_init.c b/cpukit/libfs/src/imfs/imfs_init.c
index 854363ccc6..e82490fac9 100644
--- a/cpukit/libfs/src/imfs/imfs_init.c
+++ b/cpukit/libfs/src/imfs/imfs_init.c
@@ -21,6 +21,10 @@
#include "imfs.h"
+#include <stdlib.h>
+
+#include <rtems/seterr.h>
+
const rtems_filesystem_operations_table IMFS_ops = {
.lock_h = rtems_filesystem_default_lock,
.unlock_h = rtems_filesystem_default_unlock,
@@ -43,12 +47,11 @@ const rtems_filesystem_operations_table IMFS_ops = {
.statvfs_h = rtems_filesystem_default_statvfs
};
-static const IMFS_mknod_control *const
- IMFS_mknod_controls[ IMFS_TYPE_COUNT ] = {
- [IMFS_DIRECTORY] = &IMFS_mknod_control_directory,
- [IMFS_DEVICE] = &IMFS_mknod_control_device,
- [IMFS_MEMORY_FILE] = &IMFS_mknod_control_memfile,
- [IMFS_FIFO] = &IMFS_mknod_control_enosys
+static const IMFS_mknod_controls IMFS_default_mknod_controls = {
+ .directory = &IMFS_mknod_control_directory,
+ .device = &IMFS_mknod_control_device,
+ .file = &IMFS_mknod_control_memfile,
+ .fifo = &IMFS_mknod_control_enosys
};
int IMFS_initialize(
@@ -56,9 +59,16 @@ int IMFS_initialize(
const void *data
)
{
- return IMFS_initialize_support(
- mt_entry,
- &IMFS_ops,
- IMFS_mknod_controls
- );
+ IMFS_fs_info_t *fs_info = calloc( 1, sizeof( *fs_info ) );
+ IMFS_mount_data mount_data = {
+ .fs_info = fs_info,
+ .ops = &IMFS_ops,
+ .mknod_controls = &IMFS_default_mknod_controls
+ };
+
+ if ( fs_info == NULL ) {
+ rtems_set_errno_and_return_minus_one( ENOMEM );
+ }
+
+ return IMFS_initialize_support( mt_entry, &mount_data );
}