int IMFS_initialize_support( rtems_filesystem_mount_table_entry_t *mt_entry, const void *data ) { const IMFS_mount_data *mount_data = data; IMFS_fs_info_t *fs_info = mount_data->fs_info; IMFS_jnode_t *root_node; fs_info->mknod_controls = mount_data->mknod_controls; root_node = IMFS_initialize_node( &fs_info->Root_directory.Node, &fs_info->mknod_controls->directory->node_control, "", 0, (S_IFDIR | 0755), NULL ); IMFS_assert( root_node != NULL ); mt_entry->fs_info = fs_info; mt_entry->ops = mount_data->ops; mt_entry->pathconf_limits_and_options = &IMFS_LIMITS_AND_OPTIONS; mt_entry->mt_fs_root->location.node_access = root_node; IMFS_Set_handlers( &mt_entry->mt_fs_root->location ); IMFS_determine_bytes_per_block( &imfs_memfile_bytes_per_block, imfs_rq_memfile_bytes_per_block, IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK ); return 0; }
/* * IMFS_initialize */ int IMFS_initialize_support( epos_filesystem_mount_table_entry_t *temp_mt_entry, const epos_filesystem_operations_table *op_table, const epos_filesystem_file_handlers_r *memfile_handlers, const epos_filesystem_file_handlers_r *directory_handlers ) { static int imfs_instance; IMFS_fs_info_t *fs_info; IMFS_jnode_t *jnode; /* * determine/check value for imfs_memfile_bytes_per_block */ IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block, imfs_rq_memfile_bytes_per_block, IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK); /* * Create the root node * * NOTE: UNIX root is 755 and owned by root/root (0/0). */ temp_mt_entry->mt_fs_root.node_access = IMFS_create_root_node(); temp_mt_entry->mt_fs_root.handlers = directory_handlers; temp_mt_entry->mt_fs_root.ops = op_table; temp_mt_entry->pathconf_limits_and_options = IMFS_LIMITS_AND_OPTIONS; /* * Create custom file system data. */ fs_info = calloc( 1, sizeof( IMFS_fs_info_t ) ); if ( !fs_info ) { free(temp_mt_entry->mt_fs_root.node_access); epos_set_errno_and_return_minus_one(ENOMEM); } temp_mt_entry->fs_info = fs_info; /* * Set st_ino for the root to 1. */ fs_info->instance = imfs_instance++; fs_info->ino_count = 1; fs_info->memfile_handlers = memfile_handlers; fs_info->directory_handlers = directory_handlers; jnode = temp_mt_entry->mt_fs_root.node_access; jnode->st_ino = fs_info->ino_count; /* Initialize POSIX FIFO/pipe module */ epos_pipe_initialize(); return 0; }
int IMFS_initialize_support( rtems_filesystem_mount_table_entry_t *mt_entry, const rtems_filesystem_operations_table *op_table, const IMFS_node_control *const node_controls [IMFS_TYPE_COUNT] ) { static int imfs_instance; int rv = 0; IMFS_fs_info_t *fs_info = calloc( 1, sizeof( *fs_info ) ); if ( fs_info != NULL ) { IMFS_jnode_t *root_node; fs_info->instance = imfs_instance++; memcpy( fs_info->node_controls, node_controls, sizeof( fs_info->node_controls ) ); root_node = IMFS_allocate_node( fs_info, fs_info->node_controls [IMFS_DIRECTORY], "", 0, (S_IFDIR | 0755), NULL ); if ( root_node != NULL ) { mt_entry->fs_info = fs_info; mt_entry->ops = op_table; mt_entry->pathconf_limits_and_options = &IMFS_LIMITS_AND_OPTIONS; mt_entry->mt_fs_root->location.node_access = root_node; IMFS_Set_handlers( &mt_entry->mt_fs_root->location ); } else { errno = ENOMEM; rv = -1; } } else { errno = ENOMEM; rv = -1; } if ( rv == 0 ) { IMFS_determine_bytes_per_block( &imfs_memfile_bytes_per_block, imfs_rq_memfile_bytes_per_block, IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK ); } return rv; }