[PATCH 3/7] IMFS: Simplify IMFS_symlink()

Sebastian Huber sebastian.huber at embedded-brains.de
Mon Feb 9 20:35:53 UTC 2015


---
 cpukit/libfs/src/imfs/imfs_symlink.c | 33 +++++++--------------------------
 1 file changed, 7 insertions(+), 26 deletions(-)

diff --git a/cpukit/libfs/src/imfs/imfs_symlink.c b/cpukit/libfs/src/imfs/imfs_symlink.c
index 2ddf99c..0f06446 100644
--- a/cpukit/libfs/src/imfs/imfs_symlink.c
+++ b/cpukit/libfs/src/imfs/imfs_symlink.c
@@ -20,7 +20,6 @@
 
 #include "imfs.h"
 
-#include <stdlib.h>
 #include <string.h>
 
 static const IMFS_node_control IMFS_node_control_sym_link;
@@ -32,33 +31,23 @@ int IMFS_symlink(
   const char *target
 )
 {
-  char         *dup_target;
   IMFS_jnode_t *new_node;
 
   /*
-   * Duplicate link name
-   */
-  dup_target = strdup(target);
-  if (dup_target == NULL) {
-    rtems_set_errno_and_return_minus_one(ENOMEM);
-  }
-
-  /*
    *  Create a new link node.
    */
   new_node = IMFS_create_node(
     parentloc,
     &IMFS_node_control_sym_link,
-    sizeof( IMFS_sym_link_t ),
+    sizeof( IMFS_sym_link_t ) + strlen( target ) + 1,
     name,
     namelen,
     ( S_IFLNK | ( S_IRWXU | S_IRWXG | S_IRWXO )),
-    dup_target
+    RTEMS_DECONST( char *, target )
   );
 
-  if (new_node == NULL) {
-    free(dup_target);
-    rtems_set_errno_and_return_minus_one(ENOMEM);
+  if ( new_node == NULL ) {
+    rtems_set_errno_and_return_minus_one( ENOMEM );
   }
 
   return 0;
@@ -118,23 +107,15 @@ static IMFS_jnode_t *IMFS_node_initialize_sym_link(
 {
   IMFS_sym_link_t *sym_link = (IMFS_sym_link_t *) node;
 
-  sym_link->name = arg;
+  sym_link->name = (char *) sym_link + sizeof( *sym_link );
+  strcpy( 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 );
-}
-
 static const IMFS_node_control IMFS_node_control_sym_link = {
   .handlers = &IMFS_link_handlers,
   .node_initialize = IMFS_node_initialize_sym_link,
   .node_remove = IMFS_node_remove_default,
-  .node_destroy = IMFS_node_destroy_sym_link
+  .node_destroy = IMFS_node_destroy_default
 };
-- 
2.1.4




More information about the devel mailing list