diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-01-16 13:05:13 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-01-21 13:22:52 +0100 |
commit | 5b34e7ada4c9645cbfaf855d9b9300fa3075bff5 (patch) | |
tree | 5e297e5a65510e3752de6cf3c3c3b9fe24287559 | |
parent | IMFS: Allow sockets as generic nodes (diff) | |
download | rtems-5b34e7ada4c9645cbfaf855d9b9300fa3075bff5.tar.bz2 |
IMFS: Improved support for generic nodes
The rtems_filesystem_location_info_t::node_access_2 was unused by the
IMFS. Use it to hold the context of generic nodes. This makes it
possible to use node handlers for objects with and without a
corresponding file system node.
For example network sockets created with socket() have only a file
descriptor, but no corresponding file system node. The UNIX(4) domain
sockets can be bound to file system nodes. In both cases the
rtems_filesystem_location_info_t must provide a pointer to the socket
structure used by the socket node handlers. With the context pointer
(for sockets, this is the socket structure) in
rtems_filesystem_location_info_t::node_access_2 the same node handlers
can be used in both cases.
-rw-r--r-- | cpukit/libfs/src/imfs/imfs.h | 4 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_eval.c | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/cpukit/libfs/src/imfs/imfs.h b/cpukit/libfs/src/imfs/imfs.h index f4025ebc5a..cdf4cf9d3e 100644 --- a/cpukit/libfs/src/imfs/imfs.h +++ b/cpukit/libfs/src/imfs/imfs.h @@ -980,9 +980,7 @@ static inline void *IMFS_generic_get_context_by_location( const rtems_filesystem_location_info_t *loc ) { - const IMFS_jnode_t *node = (const IMFS_jnode_t *) loc->node_access; - - return IMFS_generic_get_context_by_node( node ); + return loc->node_access_2; } static inline void *IMFS_generic_get_context_by_iop( diff --git a/cpukit/libfs/src/imfs/imfs_eval.c b/cpukit/libfs/src/imfs/imfs_eval.c index 9e2ebae653..530739069a 100644 --- a/cpukit/libfs/src/imfs/imfs_eval.c +++ b/cpukit/libfs/src/imfs/imfs_eval.c @@ -134,6 +134,8 @@ static rtems_filesystem_eval_path_generic_status IMFS_eval_token( --dir->reference_count; ++entry->reference_count; currentloc->node_access = entry; + currentloc->node_access_2 = + IMFS_generic_get_context_by_node( entry ); IMFS_Set_handlers( currentloc ); if ( !terminal ) { |