[rtems commit] IMFS: Aggregate link support in dedicated modules

Sebastian Huber sebh at rtems.org
Thu Jan 29 08:54:43 UTC 2015


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Jan 28 18:25:49 2015 +0100

IMFS: Aggregate link support in dedicated modules

---

 cpukit/libfs/Makefile.am                   |   4 +-
 cpukit/libfs/src/imfs/imfs_handlers_link.c | 137 -----------------------------
 cpukit/libfs/src/imfs/imfs_link.c          |  74 ++++++++++++++++
 cpukit/libfs/src/imfs/imfs_readlink.c      |  38 --------
 cpukit/libfs/src/imfs/imfs_symlink.c       |  76 ++++++++++++++++
 5 files changed, 152 insertions(+), 177 deletions(-)

diff --git a/cpukit/libfs/Makefile.am b/cpukit/libfs/Makefile.am
index 6427d69..a5af577 100644
--- a/cpukit/libfs/Makefile.am
+++ b/cpukit/libfs/Makefile.am
@@ -48,11 +48,11 @@ libimfs_a_SOURCES += src/imfs/deviceio.c \
     src/imfs/imfs_make_generic_node.c \
     src/imfs/imfs_fsunmount.c \
     src/imfs/imfs_handlers_device.c \
-    src/imfs/imfs_handlers_directory.c src/imfs/imfs_handlers_link.c \
+    src/imfs/imfs_handlers_directory.c \
     src/imfs/imfs_handlers_memfile.c src/imfs/imfs_init.c \
     src/imfs/imfs_initsupp.c src/imfs/imfs_link.c src/imfs/imfs_load_tar.c \
     src/imfs/imfs_mknod.c src/imfs/imfs_mount.c \
-    src/imfs/imfs_readlink.c src/imfs/imfs_rename.c src/imfs/imfs_rmnod.c \
+    src/imfs/imfs_rename.c src/imfs/imfs_rmnod.c \
     src/imfs/imfs_stat.c src/imfs/imfs_symlink.c \
     src/imfs/imfs_unmount.c src/imfs/imfs_utime.c src/imfs/ioman.c \
     src/imfs/memfile.c src/imfs/miniimfs_init.c src/imfs/imfs.h
diff --git a/cpukit/libfs/src/imfs/imfs_handlers_link.c b/cpukit/libfs/src/imfs/imfs_handlers_link.c
deleted file mode 100644
index 25848be..0000000
--- a/cpukit/libfs/src/imfs/imfs_handlers_link.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * @file
- *
- * @brief Link Operations Table for the IMFS
- * @ingroup IMFS
- */
-
-/*
- *  COPYRIGHT (c) 1989-1999.
- *  On-Line Applications Research Corporation (OAR).
- *
- *  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>
-#include <string.h>
-
-static int IMFS_stat_link(
-  const rtems_filesystem_location_info_t *loc,
-  struct stat *buf
-)
-{
-  const IMFS_jnode_t *node = loc->node_access;
-
-  if ( !IMFS_is_hard_link( node->st_mode ) ) {
-    const IMFS_sym_link_t *sym_link = (const IMFS_sym_link_t *) node;
-
-    buf->st_size = strlen( sym_link->name );
-
-    return IMFS_stat( loc, buf );
-  } else {
-    const IMFS_link_t *hard_link = (const IMFS_link_t *) node;
-    rtems_filesystem_location_info_t targetloc = *loc;
-
-    targetloc.node_access = hard_link->link_node;
-    IMFS_Set_handlers( &targetloc );
-
-    return (targetloc.handlers->fstat_h)( &targetloc, buf );
-  }
-}
-
-static const rtems_filesystem_file_handlers_r IMFS_link_handlers = {
-  .open_h = rtems_filesystem_default_open,
-  .close_h = rtems_filesystem_default_close,
-  .read_h = rtems_filesystem_default_read,
-  .write_h = rtems_filesystem_default_write,
-  .ioctl_h = rtems_filesystem_default_ioctl,
-  .lseek_h = rtems_filesystem_default_lseek,
-  .fstat_h = IMFS_stat_link,
-  .ftruncate_h = rtems_filesystem_default_ftruncate,
-  .fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
-  .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
-  .fcntl_h = rtems_filesystem_default_fcntl,
-  .kqfilter_h = rtems_filesystem_default_kqfilter,
-  .poll_h = rtems_filesystem_default_poll,
-  .readv_h = rtems_filesystem_default_readv,
-  .writev_h = rtems_filesystem_default_writev
-};
-
-static IMFS_jnode_t *IMFS_node_initialize_hard_link(
-  IMFS_jnode_t *node,
-  void *arg
-)
-{
-  IMFS_link_t *hard_link = (IMFS_link_t *) node;
-
-  hard_link->link_node = arg;
-
-  return node;
-}
-
-static IMFS_jnode_t *IMFS_node_remove_hard_link(
-  IMFS_jnode_t *node
-)
-{
-  IMFS_link_t *hard_link = (IMFS_link_t *) node;
-  IMFS_jnode_t *target = hard_link->link_node;
-
-  _Assert( target != NULL );
-
-  if ( target->st_nlink == 1) {
-    target = (*target->control->node_remove)( target );
-    if ( target == NULL ) {
-      node = NULL;
-    }
-  } else {
-    --target->st_nlink;
-    IMFS_update_ctime( target );
-  }
-
-  return node;
-}
-
-const IMFS_node_control IMFS_node_control_hard_link = {
-  .handlers = &IMFS_link_handlers,
-  .node_size = sizeof(IMFS_link_t),
-  .node_initialize = IMFS_node_initialize_hard_link,
-  .node_remove = IMFS_node_remove_hard_link,
-  .node_destroy = IMFS_node_destroy_default
-};
-
-static IMFS_jnode_t *IMFS_node_initialize_sym_link(
-  IMFS_jnode_t *node,
-  void *arg
-)
-{
-  IMFS_sym_link_t *sym_link = (IMFS_sym_link_t *) node;
-
-  sym_link->name = arg;
-
-  return node;
-}
-
-static void IMFS_node_destroy_sym_link( IMFS_jnode_t *node )
-{
-  IMFS_sym_link_t *sym_link = (IMFS_sym_link_t *) node;
-
-  free( sym_link->name );
-
-  IMFS_node_destroy_default( node );
-}
-
-const IMFS_node_control IMFS_node_control_sym_link = {
-  .handlers = &IMFS_link_handlers,
-  .node_size = sizeof(IMFS_sym_link_t),
-  .node_initialize = IMFS_node_initialize_sym_link,
-  .node_remove = IMFS_node_remove_default,
-  .node_destroy = IMFS_node_destroy_sym_link
-};
diff --git a/cpukit/libfs/src/imfs/imfs_link.c b/cpukit/libfs/src/imfs/imfs_link.c
index 61b9f43..9e25f04 100644
--- a/cpukit/libfs/src/imfs/imfs_link.c
+++ b/cpukit/libfs/src/imfs/imfs_link.c
@@ -62,3 +62,77 @@ int IMFS_link(
 
   return 0;
 }
+
+static int IMFS_stat_hard_link(
+  const rtems_filesystem_location_info_t *loc,
+  struct stat *buf
+)
+{
+  const IMFS_link_t *hard_link = loc->node_access;
+  rtems_filesystem_location_info_t targetloc = *loc;
+
+  targetloc.node_access = hard_link->link_node;
+  IMFS_Set_handlers( &targetloc );
+
+  return (targetloc.handlers->fstat_h)( &targetloc, buf );
+}
+
+static const rtems_filesystem_file_handlers_r IMFS_link_handlers = {
+  .open_h = rtems_filesystem_default_open,
+  .close_h = rtems_filesystem_default_close,
+  .read_h = rtems_filesystem_default_read,
+  .write_h = rtems_filesystem_default_write,
+  .ioctl_h = rtems_filesystem_default_ioctl,
+  .lseek_h = rtems_filesystem_default_lseek,
+  .fstat_h = IMFS_stat_hard_link,
+  .ftruncate_h = rtems_filesystem_default_ftruncate,
+  .fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
+  .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
+  .fcntl_h = rtems_filesystem_default_fcntl,
+  .kqfilter_h = rtems_filesystem_default_kqfilter,
+  .poll_h = rtems_filesystem_default_poll,
+  .readv_h = rtems_filesystem_default_readv,
+  .writev_h = rtems_filesystem_default_writev
+};
+
+static IMFS_jnode_t *IMFS_node_initialize_hard_link(
+  IMFS_jnode_t *node,
+  void *arg
+)
+{
+  IMFS_link_t *hard_link = (IMFS_link_t *) node;
+
+  hard_link->link_node = arg;
+
+  return node;
+}
+
+static IMFS_jnode_t *IMFS_node_remove_hard_link(
+  IMFS_jnode_t *node
+)
+{
+  IMFS_link_t *hard_link = (IMFS_link_t *) node;
+  IMFS_jnode_t *target = hard_link->link_node;
+
+  _Assert( target != NULL );
+
+  if ( target->st_nlink == 1) {
+    target = (*target->control->node_remove)( target );
+    if ( target == NULL ) {
+      node = NULL;
+    }
+  } else {
+    --target->st_nlink;
+    IMFS_update_ctime( target );
+  }
+
+  return node;
+}
+
+const IMFS_node_control IMFS_node_control_hard_link = {
+  .handlers = &IMFS_link_handlers,
+  .node_size = sizeof(IMFS_link_t),
+  .node_initialize = IMFS_node_initialize_hard_link,
+  .node_remove = IMFS_node_remove_hard_link,
+  .node_destroy = IMFS_node_destroy_default
+};
diff --git a/cpukit/libfs/src/imfs/imfs_readlink.c b/cpukit/libfs/src/imfs/imfs_readlink.c
deleted file mode 100644
index 2c26954..0000000
--- a/cpukit/libfs/src/imfs/imfs_readlink.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * @file
- *
- * @brief IMFS Put Symbolic Link into Buffer
- * @ingroup IMFS
- */
-
-/*
- *  COPYRIGHT (c) 1989-1999.
- *  On-Line Applications Research Corporation (OAR).
- *
- *  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"
-
-ssize_t IMFS_readlink(
-  const rtems_filesystem_location_info_t *loc,
-  char *buf,
-  size_t bufsize
-)
-{
-  IMFS_sym_link_t   *sym_link;
-  ssize_t            i;
-
-  sym_link = loc->node_access;
-
-  for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
-    buf[i] = sym_link->name[i];
-
-  return i;
-}
diff --git a/cpukit/libfs/src/imfs/imfs_symlink.c b/cpukit/libfs/src/imfs/imfs_symlink.c
index 963cefc..eaed80b 100644
--- a/cpukit/libfs/src/imfs/imfs_symlink.c
+++ b/cpukit/libfs/src/imfs/imfs_symlink.c
@@ -60,3 +60,79 @@ int IMFS_symlink(
 
   return 0;
 }
+
+ssize_t IMFS_readlink(
+  const rtems_filesystem_location_info_t *loc,
+  char *buf,
+  size_t bufsize
+)
+{
+  IMFS_sym_link_t   *sym_link;
+  ssize_t            i;
+
+  sym_link = loc->node_access;
+
+  for( i=0; ((i<bufsize) && (sym_link->name[i] != '\0')); i++ )
+    buf[i] = sym_link->name[i];
+
+  return i;
+}
+
+static int IMFS_stat_sym_link(
+  const rtems_filesystem_location_info_t *loc,
+  struct stat *buf
+)
+{
+  const IMFS_sym_link_t *sym_link = loc->node_access;
+
+  buf->st_size = strlen( sym_link->name );
+
+  return IMFS_stat( loc, buf );
+}
+
+static const rtems_filesystem_file_handlers_r IMFS_link_handlers = {
+  .open_h = rtems_filesystem_default_open,
+  .close_h = rtems_filesystem_default_close,
+  .read_h = rtems_filesystem_default_read,
+  .write_h = rtems_filesystem_default_write,
+  .ioctl_h = rtems_filesystem_default_ioctl,
+  .lseek_h = rtems_filesystem_default_lseek,
+  .fstat_h = IMFS_stat_sym_link,
+  .ftruncate_h = rtems_filesystem_default_ftruncate,
+  .fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
+  .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
+  .fcntl_h = rtems_filesystem_default_fcntl,
+  .kqfilter_h = rtems_filesystem_default_kqfilter,
+  .poll_h = rtems_filesystem_default_poll,
+  .readv_h = rtems_filesystem_default_readv,
+  .writev_h = rtems_filesystem_default_writev
+};
+
+static IMFS_jnode_t *IMFS_node_initialize_sym_link(
+  IMFS_jnode_t *node,
+  void *arg
+)
+{
+  IMFS_sym_link_t *sym_link = (IMFS_sym_link_t *) node;
+
+  sym_link->name = arg;
+
+  return node;
+}
+
+static void IMFS_node_destroy_sym_link( IMFS_jnode_t *node )
+{
+  IMFS_sym_link_t *sym_link = (IMFS_sym_link_t *) node;
+
+  free( sym_link->name );
+
+  IMFS_node_destroy_default( node );
+}
+
+const IMFS_node_control IMFS_node_control_sym_link = {
+  .handlers = &IMFS_link_handlers,
+  .node_size = sizeof(IMFS_sym_link_t),
+  .node_initialize = IMFS_node_initialize_sym_link,
+  .node_remove = IMFS_node_remove_default,
+  .node_destroy = IMFS_node_destroy_sym_link
+};



More information about the vc mailing list