[rtems commit] imfs: Untangle dependencies

Sebastian Huber sebh at rtems.org
Mon Sep 19 05:53:18 UTC 2016


Module:    rtems
Branch:    master
Commit:    d496e0979afb99a1d131d3b9183506d56f83ea26
Changeset: http://git.rtems.org/rtems/commit/?id=d496e0979afb99a1d131d3b9183506d56f83ea26

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Sep 16 13:56:08 2016 +0200

imfs: Untangle dependencies

This helps to use IMFS_make_generic_node() without pulling in the
complete IMFS implementation.

---

 cpukit/libfs/Makefile.am              |   1 +
 cpukit/libfs/src/imfs/imfs_initsupp.c |  89 --------------------------
 cpukit/libfs/src/imfs/imfs_node.c     | 115 ++++++++++++++++++++++++++++++++++
 3 files changed, 116 insertions(+), 89 deletions(-)

diff --git a/cpukit/libfs/Makefile.am b/cpukit/libfs/Makefile.am
index 7fccc2e..89e7581 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 8301831..27b93cb 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 0000000..5dd22c1
--- /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 );
+}




More information about the vc mailing list