summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-09-16 13:56:08 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-09-19 07:22:01 +0200
commitd496e0979afb99a1d131d3b9183506d56f83ea26 (patch)
treeaf239d6dbacfd6dc13653a8f24ae10a840dbfc3b
parentimfs: Fix IMFS_stat_file() (diff)
downloadrtems-d496e0979afb99a1d131d3b9183506d56f83ea26.tar.bz2
imfs: Untangle dependencies
This helps to use IMFS_make_generic_node() without pulling in the complete IMFS implementation.
-rw-r--r--cpukit/libfs/Makefile.am1
-rw-r--r--cpukit/libfs/src/imfs/imfs_initsupp.c89
-rw-r--r--cpukit/libfs/src/imfs/imfs_node.c115
3 files changed, 116 insertions, 89 deletions
diff --git a/cpukit/libfs/Makefile.am b/cpukit/libfs/Makefile.am
index 7fccc2e11b..89e7581b28 100644
--- a/cpukit/libfs/Makefile.am
+++ b/cpukit/libfs/Makefile.am
@@ -59,6 +59,7 @@ libimfs_a_SOURCES += src/imfs/deviceio.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/imfs.h
+libimfs_a_SOURCES += src/imfs/imfs_node.c
# 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/imfs_initsupp.c b/cpukit/libfs/src/imfs/imfs_initsupp.c
index 83018313e2..27b93cb41f 100644
--- a/cpukit/libfs/src/imfs/imfs_initsupp.c
+++ b/cpukit/libfs/src/imfs/imfs_initsupp.c
@@ -51,52 +51,6 @@ static int IMFS_determine_bytes_per_block(
return 0;
}
-IMFS_jnode_t *IMFS_initialize_node(
- IMFS_jnode_t *node,
- const IMFS_node_control *node_control,
- const char *name,
- size_t namelen,
- mode_t mode,
- void *arg
-)
-{
- struct timeval tv;
-
- if ( namelen > IMFS_NAME_MAX ) {
- errno = ENAMETOOLONG;
-
- return NULL;
- }
-
- gettimeofday( &tv, 0 );
-
- /*
- * Fill in the basic information
- */
- node->name = name;
- node->namelen = namelen;
- node->reference_count = 1;
- node->st_nlink = 1;
- node->control = node_control;
-
- /*
- * Fill in the mode and permission information for the jnode structure.
- */
- node->st_mode = mode;
- node->st_uid = geteuid();
- node->st_gid = getegid();
-
- /*
- * Now set all the times.
- */
-
- node->stat_atime = (time_t) tv.tv_sec;
- node->stat_mtime = (time_t) tv.tv_sec;
- node->stat_ctime = (time_t) tv.tv_sec;
-
- return (*node_control->node_initialize)( node, arg );
-}
-
int IMFS_initialize_support(
rtems_filesystem_mount_table_entry_t *mt_entry,
const void *data
@@ -133,33 +87,6 @@ int IMFS_initialize_support(
return 0;
}
-int IMFS_node_clone( rtems_filesystem_location_info_t *loc )
-{
- IMFS_jnode_t *node = loc->node_access;
-
- ++node->reference_count;
-
- return 0;
-}
-
-void IMFS_node_destroy( IMFS_jnode_t *node )
-{
- IMFS_assert( node->reference_count == 0 );
-
- (*node->control->node_destroy)( node );
-}
-
-void IMFS_node_free( const rtems_filesystem_location_info_t *loc )
-{
- IMFS_jnode_t *node = loc->node_access;
-
- --node->reference_count;
-
- if ( node->reference_count == 0 ) {
- IMFS_node_destroy( node );
- }
-}
-
static IMFS_jnode_t *IMFS_node_initialize_enosys(
IMFS_jnode_t *node,
void *arg
@@ -178,22 +105,6 @@ IMFS_jnode_t *IMFS_node_initialize_default(
return node;
}
-IMFS_jnode_t *IMFS_node_remove_default(
- IMFS_jnode_t *node
-)
-{
- return node;
-}
-
-void IMFS_node_destroy_default( IMFS_jnode_t *node )
-{
- if ( ( node->flags & IMFS_NODE_FLAG_NAME_ALLOCATED ) != 0 ) {
- free( RTEMS_DECONST( char *, node->name ) );
- }
-
- free( node );
-}
-
const IMFS_mknod_control IMFS_mknod_control_enosys = {
{
.handlers = &rtems_filesystem_handlers_default,
diff --git a/cpukit/libfs/src/imfs/imfs_node.c b/cpukit/libfs/src/imfs/imfs_node.c
new file mode 100644
index 0000000000..5dd22c1542
--- /dev/null
+++ b/cpukit/libfs/src/imfs/imfs_node.c
@@ -0,0 +1,115 @@
+/**
+ * @file
+ *
+ * @brief IMFS Node Support
+ * @ingroup IMFS
+ */
+
+/*
+ * COPYRIGHT (c) 1989-1999.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * Modifications to support reference counting in the file system are
+ * Copyright (c) 2012 embedded brains GmbH.
+ *
+ * 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>
+
+IMFS_jnode_t *IMFS_initialize_node(
+ IMFS_jnode_t *node,
+ const IMFS_node_control *node_control,
+ const char *name,
+ size_t namelen,
+ mode_t mode,
+ void *arg
+)
+{
+ struct timeval tv;
+
+ if ( namelen > IMFS_NAME_MAX ) {
+ errno = ENAMETOOLONG;
+
+ return NULL;
+ }
+
+ gettimeofday( &tv, 0 );
+
+ /*
+ * Fill in the basic information
+ */
+ node->name = name;
+ node->namelen = namelen;
+ node->reference_count = 1;
+ node->st_nlink = 1;
+ node->control = node_control;
+
+ /*
+ * Fill in the mode and permission information for the jnode structure.
+ */
+ node->st_mode = mode;
+ node->st_uid = geteuid();
+ node->st_gid = getegid();
+
+ /*
+ * Now set all the times.
+ */
+
+ node->stat_atime = (time_t) tv.tv_sec;
+ node->stat_mtime = (time_t) tv.tv_sec;
+ node->stat_ctime = (time_t) tv.tv_sec;
+
+ return (*node_control->node_initialize)( node, arg );
+}
+
+int IMFS_node_clone( rtems_filesystem_location_info_t *loc )
+{
+ IMFS_jnode_t *node = loc->node_access;
+
+ ++node->reference_count;
+
+ return 0;
+}
+
+void IMFS_node_destroy( IMFS_jnode_t *node )
+{
+ IMFS_assert( node->reference_count == 0 );
+
+ (*node->control->node_destroy)( node );
+}
+
+void IMFS_node_free( const rtems_filesystem_location_info_t *loc )
+{
+ IMFS_jnode_t *node = loc->node_access;
+
+ --node->reference_count;
+
+ if ( node->reference_count == 0 ) {
+ IMFS_node_destroy( node );
+ }
+}
+
+IMFS_jnode_t *IMFS_node_remove_default(
+ IMFS_jnode_t *node
+)
+{
+ return node;
+}
+
+void IMFS_node_destroy_default( IMFS_jnode_t *node )
+{
+ if ( ( node->flags & IMFS_NODE_FLAG_NAME_ALLOCATED ) != 0 ) {
+ free( RTEMS_DECONST( char *, node->name ) );
+ }
+
+ free( node );
+}