diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-10-12 18:44:40 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-10-12 18:44:40 +0000 |
commit | d71fcabaa6bc42e82d83060da49abff2b41ee272 (patch) | |
tree | 0fe667b13aa15cbab7baaed510a894fa1cb9dd78 /cpukit/libfs/src/imfs/ioman.c | |
parent | Changed bcopy to strncpy to stick to ANSI/ISO routines. (diff) | |
download | rtems-d71fcabaa6bc42e82d83060da49abff2b41ee272.tar.bz2 |
Added call to freenod to let each filesystem free its own internal
node used to manage file access.
Diffstat (limited to '')
-rw-r--r-- | cpukit/libfs/src/imfs/ioman.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/cpukit/libfs/src/imfs/ioman.c b/cpukit/libfs/src/imfs/ioman.c index 23d5c5b18f..ca8734913c 100644 --- a/cpukit/libfs/src/imfs/ioman.c +++ b/cpukit/libfs/src/imfs/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; } |