summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libc/ioman.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-10-12 18:44:40 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-10-12 18:44:40 +0000
commitd71fcabaa6bc42e82d83060da49abff2b41ee272 (patch)
tree0fe667b13aa15cbab7baaed510a894fa1cb9dd78 /c/src/lib/libc/ioman.c
parentChanged bcopy to strncpy to stick to ANSI/ISO routines. (diff)
downloadrtems-d71fcabaa6bc42e82d83060da49abff2b41ee272.tar.bz2
Added call to freenod to let each filesystem free its own internal
node used to manage file access.
Diffstat (limited to 'c/src/lib/libc/ioman.c')
-rw-r--r--c/src/lib/libc/ioman.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/c/src/lib/libc/ioman.c b/c/src/lib/libc/ioman.c
index 23d5c5b18f..ca8734913c 100644
--- a/c/src/lib/libc/ioman.c
+++ b/c/src/lib/libc/ioman.c
@@ -61,6 +61,9 @@ rtems_status_code rtems_io_register_name(
* rtems_io_lookup_name
*
* This version is not reentrant.
+ *
+ * XXX - This is dependent upon IMFS and should not be.
+ * Suggest adding a filesystem routine to fill in the device_info.
*/
rtems_status_code rtems_io_lookup_name(
@@ -70,15 +73,20 @@ rtems_status_code rtems_io_lookup_name(
{
#if !defined(RTEMS_UNIX)
IMFS_jnode_t *the_jnode;
- rtems_filesystem_location_info_t temp_loc;
+ rtems_filesystem_location_info_t loc;
static rtems_driver_name_t device;
int result;
+ rtems_filesystem_node_types_t node_type;
+
+ result = rtems_filesystem_evaluate_path( name, 0x00, &loc, TRUE );
+ the_jnode = loc.node_access;
- result = rtems_filesystem_evaluate_path( name, 0x00, &temp_loc, TRUE );
- the_jnode = temp_loc.node_access;
+ node_type = (*loc.ops->node_type)( &loc );
- if ( (result != 0) || the_jnode->type != IMFS_DEVICE ) {
+ if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {
*device_info = 0;
+ if ( loc.ops->freenod )
+ (*loc.ops->freenod)( &loc );
return RTEMS_UNSATISFIED;
}
@@ -87,6 +95,10 @@ rtems_status_code rtems_io_lookup_name(
device.major = the_jnode->info.device.major;
device.minor = the_jnode->info.device.minor;
*device_info = &device;
+
+ if ( loc.ops->freenod )
+ (*loc.ops->freenod)( &loc );
+
#endif
return RTEMS_SUCCESSFUL;
}