source: rtems/cpukit/libfs/src/imfs/imfs_initsupp.c @ 0ec9bbc

5
Last change on this file since 0ec9bbc was a397c7d8, checked in by Sebastian Huber <sebastian.huber@…>, on 12/13/17 at 07:00:02

IMFS: Include <rtems/imfs.h>

Prepare for header file move to common include directory.

Update #3254.

  • Property mode set to 100644
File size: 2.5 KB
Line 
1/**
2 * @file
3 *
4 * @brief IMFS Node Support
5 * @ingroup IMFS
6 */
7
8/*
9 *  COPYRIGHT (c) 1989-2010.
10 *  On-Line Applications Research Corporation (OAR).
11 *
12 *  The license and distribution terms for this file may be
13 *  found in the file LICENSE in this distribution or at
14 *  http://www.rtems.org/license/LICENSE.
15 */
16
17#if HAVE_CONFIG_H
18  #include "config.h"
19#endif
20
21#include <rtems/imfs.h>
22
23#include <errno.h>
24#include <stdlib.h>
25#include <string.h>
26#include <unistd.h>
27
28static int IMFS_determine_bytes_per_block(
29  int *dest_bytes_per_block,
30  int requested_bytes_per_block,
31  int default_bytes_per_block
32)
33{
34  bool is_valid = false;
35  int bit_mask;
36
37  /*
38   * check, whether requested bytes per block is valid
39   */
40  for (bit_mask = 16; !is_valid && (bit_mask <= 512); bit_mask <<= 1) {
41    if (bit_mask == requested_bytes_per_block) {
42      is_valid = true;
43      break;
44    }
45    if(bit_mask > requested_bytes_per_block)
46      break;
47  }
48  *dest_bytes_per_block = ((is_valid)
49                           ? requested_bytes_per_block
50                           : default_bytes_per_block);
51  return 0;
52}
53
54int IMFS_initialize_support(
55  rtems_filesystem_mount_table_entry_t *mt_entry,
56  const void                           *data
57)
58{
59  const IMFS_mount_data *mount_data = data;
60  IMFS_fs_info_t *fs_info = mount_data->fs_info;
61  IMFS_jnode_t *root_node;
62
63  fs_info->mknod_controls = mount_data->mknod_controls;
64
65  root_node = IMFS_initialize_node(
66    &fs_info->Root_directory.Node,
67    &fs_info->mknod_controls->directory->node_control,
68    "",
69    0,
70    (S_IFDIR | 0755),
71    NULL
72  );
73  IMFS_assert( root_node != NULL );
74
75  mt_entry->fs_info = fs_info;
76  mt_entry->ops = mount_data->ops;
77  mt_entry->pathconf_limits_and_options = &IMFS_LIMITS_AND_OPTIONS;
78  mt_entry->mt_fs_root->location.node_access = root_node;
79  IMFS_Set_handlers( &mt_entry->mt_fs_root->location );
80
81  IMFS_determine_bytes_per_block(
82    &imfs_memfile_bytes_per_block,
83    imfs_rq_memfile_bytes_per_block,
84    IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK
85  );
86
87  return 0;
88}
89
90static IMFS_jnode_t *IMFS_node_initialize_enosys(
91  IMFS_jnode_t *node,
92  void *arg
93)
94{
95  errno = ENOSYS;
96
97  return NULL;
98}
99
100IMFS_jnode_t *IMFS_node_initialize_default(
101  IMFS_jnode_t *node,
102  void *arg
103)
104{
105  return node;
106}
107
108const IMFS_mknod_control IMFS_mknod_control_enosys = {
109  {
110    .handlers = &rtems_filesystem_handlers_default,
111    .node_initialize = IMFS_node_initialize_enosys,
112    .node_remove = IMFS_node_remove_default,
113    .node_destroy = IMFS_node_destroy_default
114  },
115  .node_size = sizeof( IMFS_jnode_t )
116};
Note: See TracBrowser for help on using the repository browser.