[rtems commit] IMFS: Split linfile and memfile modules

Sebastian Huber sebh at rtems.org
Thu Feb 12 20:48:07 UTC 2015


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Feb  5 16:43:58 2015 +0100

IMFS: Split linfile and memfile modules

Make several functions static.

---

 cpukit/libfs/Makefile.am                           |   7 +-
 cpukit/libfs/src/imfs/imfs.h                       |  62 ++---------
 .../{imfs_handlers_memfile.c => imfs_linfile.c}    |  80 ++++++++------
 .../libfs/src/imfs/{memfile.c => imfs_memfile.c}   | 123 ++++++++-------------
 cpukit/libfs/src/imfs/imfs_stat_file.c             |  33 ++++++
 5 files changed, 137 insertions(+), 168 deletions(-)

diff --git a/cpukit/libfs/Makefile.am b/cpukit/libfs/Makefile.am
index 4bff8cf..3c454e7 100644
--- a/cpukit/libfs/Makefile.am
+++ b/cpukit/libfs/Makefile.am
@@ -49,13 +49,14 @@ libimfs_a_SOURCES += src/imfs/deviceio.c \
     src/imfs/imfs_fsunmount.c \
     src/imfs/imfs_handlers_device.c \
     src/imfs/imfs_handlers_directory.c \
-    src/imfs/imfs_handlers_memfile.c src/imfs/imfs_init.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_linfile.c \
     src/imfs/imfs_mknod.c src/imfs/imfs_mount.c \
     src/imfs/imfs_rename.c src/imfs/imfs_rmnod.c \
-    src/imfs/imfs_stat.c src/imfs/imfs_symlink.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/memfile.c src/imfs/miniimfs_init.c src/imfs/imfs.h
+    src/imfs/imfs_memfile.c src/imfs/miniimfs_init.c src/imfs/imfs.h
 
 # 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.h b/cpukit/libfs/src/imfs/imfs.h
index f69408a..12881c4 100644
--- a/cpukit/libfs/src/imfs/imfs.h
+++ b/cpukit/libfs/src/imfs/imfs.h
@@ -511,6 +511,11 @@ extern int IMFS_stat(
   struct stat *buf
 );
 
+extern int IMFS_stat_file(
+  const rtems_filesystem_location_info_t *loc,
+  struct stat *buf
+);
+
 /**
  * @brief IMFS evaluation node support.
  */
@@ -711,20 +716,6 @@ extern int IMFS_unmount(
   rtems_filesystem_mount_table_entry_t *mt_entry  /* IN */
 );
 
-extern void IMFS_memfile_remove(
- IMFS_jnode_t  *the_jnode         /* IN/OUT */
-);
-
-/**
- * @brief Truncate a memory file.
- *
- * This routine processes the ftruncate() system call.
- */
-extern int memfile_ftruncate(
-  rtems_libio_t *iop,               /* IN  */
-  off_t          length             /* IN  */
-);
-
 /**
  * @brief Read the next directory of the IMFS.
  * 
@@ -756,44 +747,11 @@ extern ssize_t imfs_dir_read(
  */
 /**@{*/
 
-/**
- * @brief Open a linear file.
- *
- * Transforms the file into a memfile if opened for writing.
- */
-extern int IMFS_linfile_open(
-  rtems_libio_t *iop,             /* IN  */
-  const char    *pathname,        /* IN  */
-  int            oflag,           /* IN  */
-  mode_t         mode             /* IN  */
-);
-
-extern ssize_t IMFS_linfile_read(
-  rtems_libio_t *iop,
-  void          *buffer,
-  size_t         count
-);
-
-/**
- * @brief Read a memory file.
- *
- * This routine processes the read() system call.
- */
-extern ssize_t memfile_read(
-  rtems_libio_t *iop,             /* IN  */
-  void          *buffer,          /* IN  */
-  size_t         count            /* IN  */
-);
-
-/**
- * @brief Write a memory file.
- *
- * This routine processes the write() system call.
- */
-extern ssize_t memfile_write(
-  rtems_libio_t *iop,             /* IN  */
-  const void    *buffer,          /* IN  */
-  size_t         count            /* IN  */
+extern ssize_t IMFS_memfile_write(
+  IMFS_memfile_t      *memfile,
+  off_t                start,
+  const unsigned char *source,
+  unsigned int         length
 );
 
 /** @} */
diff --git a/cpukit/libfs/src/imfs/imfs_handlers_memfile.c b/cpukit/libfs/src/imfs/imfs_linfile.c
similarity index 50%
rename from cpukit/libfs/src/imfs/imfs_handlers_memfile.c
rename to cpukit/libfs/src/imfs/imfs_linfile.c
index 1e5dba2..8a14866 100644
--- a/cpukit/libfs/src/imfs/imfs_handlers_memfile.c
+++ b/cpukit/libfs/src/imfs/imfs_linfile.c
@@ -1,7 +1,6 @@
 /**
  * @file
  *
- * @brief Memfile Operations Tables
  * @ingroup IMFS
  */
 
@@ -20,36 +19,57 @@
 
 #include "imfs.h"
 
-static int IMFS_stat_file(
-  const rtems_filesystem_location_info_t *loc,
-  struct stat *buf
+static ssize_t IMFS_linfile_read(
+  rtems_libio_t *iop,
+  void          *buffer,
+  size_t         count
 )
 {
-  const IMFS_file_t *file = loc->node_access;
+  IMFS_file_t *file = IMFS_iop_to_file( iop );
+  off_t start = iop->offset;
+  size_t size = file->File.size;
+  const unsigned char *data = file->Linearfile.direct;
 
-  buf->st_size = file->File.size;
-  buf->st_blksize = imfs_rq_memfile_bytes_per_block;
+  if (count > size - start)
+    count = size - start;
 
-  return IMFS_stat( loc, buf );
+  IMFS_update_atime( &file->Node );
+  iop->offset = start + count;
+  memcpy(buffer, &data[start], count);
+
+  return (ssize_t) count;
 }
 
-static const rtems_filesystem_file_handlers_r IMFS_memfile_handlers = {
-  .open_h = rtems_filesystem_default_open,
-  .close_h = rtems_filesystem_default_close,
-  .read_h = memfile_read,
-  .write_h = memfile_write,
-  .ioctl_h = rtems_filesystem_default_ioctl,
-  .lseek_h = rtems_filesystem_default_lseek_file,
-  .fstat_h = IMFS_stat_file,
-  .ftruncate_h = memfile_ftruncate,
-  .fsync_h = rtems_filesystem_default_fsync_or_fdatasync_success,
-  .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync_success,
-  .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 int IMFS_linfile_open(
+  rtems_libio_t *iop,
+  const char    *pathname,
+  int            oflag,
+  mode_t         mode
+)
+{
+  IMFS_file_t *file;
+
+  file = iop->pathinfo.node_access;
+
+  /*
+   * Perform 'copy on write' for linear files
+   */
+  if ((iop->flags & LIBIO_FLAGS_WRITE) != 0) {
+    uint32_t count = file->File.size;
+    const unsigned char *buffer = file->Linearfile.direct;
+
+    file->Node.control            = &IMFS_mknod_control_memfile.node_control;
+    file->File.size               = 0;
+    file->Memfile.indirect        = 0;
+    file->Memfile.doubly_indirect = 0;
+    file->Memfile.triply_indirect = 0;
+    if ((count != 0)
+     && (IMFS_memfile_write(&file->Memfile, 0, buffer, count) == -1))
+        return -1;
+  }
+
+  return 0;
+}
 
 static const rtems_filesystem_file_handlers_r IMFS_linfile_handlers = {
   .open_h = IMFS_linfile_open,
@@ -69,16 +89,6 @@ static const rtems_filesystem_file_handlers_r IMFS_linfile_handlers = {
   .writev_h = rtems_filesystem_default_writev
 };
 
-const IMFS_mknod_control IMFS_mknod_control_memfile = {
-  {
-    .handlers = &IMFS_memfile_handlers,
-    .node_initialize = IMFS_node_initialize_default,
-    .node_remove = IMFS_node_remove_default,
-    .node_destroy = IMFS_memfile_remove
-  },
-  .node_size = sizeof( IMFS_file_t )
-};
-
 const IMFS_node_control IMFS_node_control_linfile = {
   .handlers = &IMFS_linfile_handlers,
   .node_initialize = IMFS_node_initialize_default,
diff --git a/cpukit/libfs/src/imfs/memfile.c b/cpukit/libfs/src/imfs/imfs_memfile.c
similarity index 90%
rename from cpukit/libfs/src/imfs/memfile.c
rename to cpukit/libfs/src/imfs/imfs_memfile.c
index 59da9a6..2b6a496 100644
--- a/cpukit/libfs/src/imfs/memfile.c
+++ b/cpukit/libfs/src/imfs/imfs_memfile.c
@@ -23,106 +23,45 @@
 #include <stdlib.h>
 #include <string.h>
 
-#define MEMFILE_STATIC
-
 /*
  *  Prototypes of private routines
  */
-MEMFILE_STATIC int IMFS_memfile_extend(
+static int IMFS_memfile_extend(
    IMFS_memfile_t *memfile,
    bool            zero_fill,
    off_t           new_length
 );
 
-MEMFILE_STATIC int IMFS_memfile_addblock(
+static int IMFS_memfile_addblock(
    IMFS_memfile_t *memfile,
    unsigned int    block
 );
 
-MEMFILE_STATIC void IMFS_memfile_remove_block(
+static void IMFS_memfile_remove_block(
    IMFS_memfile_t *memfile,
    unsigned int    block
 );
 
-MEMFILE_STATIC block_p *IMFS_memfile_get_block_pointer(
+static block_p *IMFS_memfile_get_block_pointer(
    IMFS_memfile_t *memfile,
    unsigned int    block,
    int             malloc_it
 );
 
-MEMFILE_STATIC ssize_t IMFS_memfile_read(
+static ssize_t IMFS_memfile_read(
    IMFS_file_t     *file,
    off_t            start,
    unsigned char   *destination,
    unsigned int     length
 );
 
-ssize_t IMFS_memfile_write(  /* cannot be static as used in imfs_fchmod.c */
-   IMFS_memfile_t        *memfile,
-   off_t                  start,
-   const unsigned char   *source,
-   unsigned int           length
-);
-
-void *memfile_alloc_block(void);
+static void *memfile_alloc_block(void);
 
-void memfile_free_block(
+static void memfile_free_block(
   void *memory
 );
 
-int IMFS_linfile_open(
-  rtems_libio_t *iop,
-  const char    *pathname,
-  int            oflag,
-  mode_t         mode
-)
-{
-  IMFS_file_t *file;
-
-  file = iop->pathinfo.node_access;
-
-  /*
-   * Perform 'copy on write' for linear files
-   */
-  if ((iop->flags & LIBIO_FLAGS_WRITE) != 0) {
-    uint32_t count = file->File.size;
-    const unsigned char *buffer = file->Linearfile.direct;
-
-    file->Node.control            = &IMFS_mknod_control_memfile.node_control;
-    file->File.size               = 0;
-    file->Memfile.indirect        = 0;
-    file->Memfile.doubly_indirect = 0;
-    file->Memfile.triply_indirect = 0;
-    if ((count != 0)
-     && (IMFS_memfile_write(&file->Memfile, 0, buffer, count) == -1))
-        return -1;
-  }
-
-  return 0;
-}
-
-ssize_t IMFS_linfile_read(
-  rtems_libio_t *iop,
-  void          *buffer,
-  size_t         count
-)
-{
-  IMFS_file_t *file = IMFS_iop_to_file( iop );
-  off_t start = iop->offset;
-  size_t size = file->File.size;
-  const unsigned char *data = file->Linearfile.direct;
-
-  if (count > size - start)
-    count = size - start;
-
-  IMFS_update_atime( &file->Node );
-  iop->offset = start + count;
-  memcpy(buffer, &data[start], count);
-
-  return (ssize_t) count;
-}
-
-ssize_t memfile_read(
+static ssize_t memfile_read(
   rtems_libio_t *iop,
   void          *buffer,
   size_t         count
@@ -139,7 +78,7 @@ ssize_t memfile_read(
   return status;
 }
 
-ssize_t memfile_write(
+static ssize_t memfile_write(
   rtems_libio_t *iop,
   const void    *buffer,
   size_t         count
@@ -165,7 +104,7 @@ ssize_t memfile_write(
  *  This IMFS_stat() can be used.
  */
 
-int memfile_ftruncate(
+static int memfile_ftruncate(
   rtems_libio_t        *iop,
   off_t                 length
 )
@@ -200,7 +139,7 @@ int memfile_ftruncate(
  *  specified.  If necessary, it will allocate memory blocks to
  *  extend the file.
  */
-MEMFILE_STATIC int IMFS_memfile_extend(
+static int IMFS_memfile_extend(
    IMFS_memfile_t *memfile,
    bool            zero_fill,
    off_t           new_length
@@ -271,7 +210,7 @@ MEMFILE_STATIC int IMFS_memfile_extend(
  *
  *  This routine adds a single block to the specified in-memory file.
  */
-MEMFILE_STATIC int IMFS_memfile_addblock(
+static int IMFS_memfile_addblock(
    IMFS_memfile_t *memfile,
    unsigned int    block
 )
@@ -312,7 +251,7 @@ MEMFILE_STATIC int IMFS_memfile_addblock(
  *         block from the middle of a file would be exceptionally
  *         dangerous and the results unpredictable.
  */
-MEMFILE_STATIC void IMFS_memfile_remove_block(
+static void IMFS_memfile_remove_block(
    IMFS_memfile_t *memfile,
    unsigned int    block
 )
@@ -368,7 +307,7 @@ static void memfile_free_blocks_in_table(
 }
 
 /*
- *  IMFS_memfile_remove
+ *  IMFS_memfile_destroy
  *
  *  This routine frees all memory associated with an in memory file.
  *
@@ -385,7 +324,7 @@ static void memfile_free_blocks_in_table(
  *         Regardless until the IMFS implementation is proven, it
  *         is better to stick to simple, easy to understand algorithms.
  */
-void IMFS_memfile_remove(
+static void IMFS_memfile_destroy(
  IMFS_jnode_t  *the_jnode
 )
 {
@@ -461,7 +400,7 @@ void IMFS_memfile_remove(
  *  reading the data between offset and the end of the file (truncated
  *  read).
  */
-MEMFILE_STATIC ssize_t IMFS_memfile_read(
+static ssize_t IMFS_memfile_read(
    IMFS_file_t     *file,
    off_t            start,
    unsigned char   *destination,
@@ -566,7 +505,7 @@ MEMFILE_STATIC ssize_t IMFS_memfile_read(
  *  This routine writes the specified data buffer into the in memory
  *  file pointed to by memfile.  The file is extended as needed.
  */
-MEMFILE_STATIC ssize_t IMFS_memfile_write(
+ssize_t IMFS_memfile_write(
    IMFS_memfile_t        *memfile,
    off_t                  start,
    const unsigned char   *source,
@@ -891,3 +830,31 @@ void memfile_free_block(
   free(memory);
   memfile_blocks_allocated--;
 }
+
+static const rtems_filesystem_file_handlers_r IMFS_memfile_handlers = {
+  .open_h = rtems_filesystem_default_open,
+  .close_h = rtems_filesystem_default_close,
+  .read_h = memfile_read,
+  .write_h = memfile_write,
+  .ioctl_h = rtems_filesystem_default_ioctl,
+  .lseek_h = rtems_filesystem_default_lseek_file,
+  .fstat_h = IMFS_stat_file,
+  .ftruncate_h = memfile_ftruncate,
+  .fsync_h = rtems_filesystem_default_fsync_or_fdatasync_success,
+  .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync_success,
+  .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
+};
+
+const IMFS_mknod_control IMFS_mknod_control_memfile = {
+  {
+    .handlers = &IMFS_memfile_handlers,
+    .node_initialize = IMFS_node_initialize_default,
+    .node_remove = IMFS_node_remove_default,
+    .node_destroy = IMFS_memfile_destroy
+  },
+  .node_size = sizeof( IMFS_file_t )
+};
diff --git a/cpukit/libfs/src/imfs/imfs_stat_file.c b/cpukit/libfs/src/imfs/imfs_stat_file.c
new file mode 100644
index 0000000..2302705
--- /dev/null
+++ b/cpukit/libfs/src/imfs/imfs_stat_file.c
@@ -0,0 +1,33 @@
+/**
+ * @file
+ *
+ * @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"
+
+int IMFS_stat_file(
+  const rtems_filesystem_location_info_t *loc,
+  struct stat *buf
+)
+{
+  const IMFS_file_t *file = loc->node_access;
+
+  buf->st_size = file->File.size;
+  buf->st_blksize = imfs_rq_memfile_bytes_per_block;
+
+  return IMFS_stat( loc, buf );
+}



More information about the vc mailing list