From d71fcabaa6bc42e82d83060da49abff2b41ee272 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 12 Oct 1999 18:44:40 +0000 Subject: Added call to freenod to let each filesystem free its own internal node used to manage file access. --- c/src/lib/libc/ioman.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'c/src/lib/libc/ioman.c') 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; } -- cgit v1.2.3