summaryrefslogtreecommitdiff
path: root/cpukit/libfs/src/imfs/imfs_initsupp.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libfs/src/imfs/imfs_initsupp.c')
-rw-r--r--cpukit/libfs/src/imfs/imfs_initsupp.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/cpukit/libfs/src/imfs/imfs_initsupp.c b/cpukit/libfs/src/imfs/imfs_initsupp.c
index 61ad6a70f2..042995b878 100644
--- a/cpukit/libfs/src/imfs/imfs_initsupp.c
+++ b/cpukit/libfs/src/imfs/imfs_initsupp.c
@@ -106,3 +106,41 @@ 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 );
+
+ switch ( node->type ) {
+ case IMFS_MEMORY_FILE:
+ IMFS_memfile_remove( node );
+ break;
+ case IMFS_SYM_LINK:
+ free( node->info.sym_link.name );
+ break;
+ default:
+ break;
+ }
+
+ free( node );
+}
+
+void IMFS_node_free( const rtems_filesystem_location_info_t *loc )
+{
+ IMFS_jnode_t *node = loc->node_access;
+
+ if ( node->reference_count == 1 ) {
+ IMFS_node_destroy( node );
+ } else {
+ --node->reference_count;
+ }
+}