From dd0f32614ceb0dd72f406d8434acdecc5ccff616 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 12 Oct 1999 19:10:46 +0000 Subject: Added rtems_filesystem_freenode() macro and added calls at appropriate places to make sure memory allocated for filesystem specifif nodes gets freed. --- c/src/exec/include/rtems/libio_.h | 12 ++++++++++++ c/src/exec/libcsupport/include/rtems/libio_.h | 12 ++++++++++++ c/src/exec/libcsupport/src/chdir.c | 9 +++------ c/src/exec/libcsupport/src/chmod.c | 6 ++---- c/src/exec/libcsupport/src/chown.c | 6 ++---- c/src/exec/libcsupport/src/link.c | 27 +++++++-------------------- c/src/exec/libcsupport/src/mknod.c | 7 +++---- c/src/exec/libcsupport/src/mount.c | 6 ++---- c/src/exec/libcsupport/src/open.c | 5 ++--- c/src/exec/libcsupport/src/readlink.c | 12 ++++-------- c/src/exec/libcsupport/src/rmdir.c | 12 ++++-------- c/src/exec/libcsupport/src/stat.c | 6 ++---- c/src/exec/libcsupport/src/symlink.c | 3 +-- c/src/exec/libcsupport/src/unlink.c | 12 ++++-------- c/src/exec/libcsupport/src/unmount.c | 17 ++++++----------- c/src/exec/libcsupport/src/utime.c | 3 +-- c/src/exec/libfs/src/imfs/ioman.c | 6 ++---- c/src/lib/include/rtems/libio_.h | 12 ++++++++++++ c/src/lib/libc/chdir.c | 9 +++------ c/src/lib/libc/chmod.c | 6 ++---- c/src/lib/libc/chown.c | 6 ++---- c/src/lib/libc/ioman.c | 6 ++---- c/src/lib/libc/libio_.h | 12 ++++++++++++ c/src/lib/libc/link.c | 27 +++++++-------------------- c/src/lib/libc/mknod.c | 7 +++---- c/src/lib/libc/mount.c | 6 ++---- c/src/lib/libc/open.c | 5 ++--- c/src/lib/libc/readlink.c | 12 ++++-------- c/src/lib/libc/rmdir.c | 12 ++++-------- c/src/lib/libc/stat.c | 6 ++---- c/src/lib/libc/symlink.c | 3 +-- c/src/lib/libc/unlink.c | 12 ++++-------- c/src/lib/libc/unmount.c | 17 ++++++----------- c/src/lib/libc/utime.c | 3 +-- c/src/libfs/src/imfs/ioman.c | 6 ++---- 35 files changed, 140 insertions(+), 188 deletions(-) (limited to 'c/src') diff --git a/c/src/exec/include/rtems/libio_.h b/c/src/exec/include/rtems/libio_.h index 029bb437dd..8c186278fa 100644 --- a/c/src/exec/include/rtems/libio_.h +++ b/c/src/exec/include/rtems/libio_.h @@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask; } \ } while (0) +/* + * rtems_filesystem_freenode + * + * Macro to free a node. + */ + +#define rtems_filesystem_freenode( _node ) \ + do { \ + if ( (_node)->ops->freenod ) \ + (*(_node)->ops->freenod)( (_node) ); \ + } while (0) + /* * rtems_filesystem_is_separator * diff --git a/c/src/exec/libcsupport/include/rtems/libio_.h b/c/src/exec/libcsupport/include/rtems/libio_.h index 029bb437dd..8c186278fa 100644 --- a/c/src/exec/libcsupport/include/rtems/libio_.h +++ b/c/src/exec/libcsupport/include/rtems/libio_.h @@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask; } \ } while (0) +/* + * rtems_filesystem_freenode + * + * Macro to free a node. + */ + +#define rtems_filesystem_freenode( _node ) \ + do { \ + if ( (_node)->ops->freenod ) \ + (*(_node)->ops->freenod)( (_node) ); \ + } while (0) + /* * rtems_filesystem_is_separator * diff --git a/c/src/exec/libcsupport/src/chdir.c b/c/src/exec/libcsupport/src/chdir.c index 4b3c313f7b..38f64d8c56 100644 --- a/c/src/exec/libcsupport/src/chdir.c +++ b/c/src/exec/libcsupport/src/chdir.c @@ -39,19 +39,16 @@ int chdir( */ if ( !loc.ops->node_type ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTDIR ); } - if ( rtems_filesystem_current.ops->freenod ) - (*rtems_filesystem_current.ops->freenod)( &rtems_filesystem_current ); + rtems_filesystem_freenode( &rtems_filesystem_current ); rtems_filesystem_current = loc; diff --git a/c/src/exec/libcsupport/src/chmod.c b/c/src/exec/libcsupport/src/chmod.c index acfc142ad0..70ef5a3dff 100644 --- a/c/src/exec/libcsupport/src/chmod.c +++ b/c/src/exec/libcsupport/src/chmod.c @@ -35,15 +35,13 @@ int chmod( return -1; if ( !loc.handlers->fchmod ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.handlers->fchmod)( &loc, mode ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/exec/libcsupport/src/chown.c b/c/src/exec/libcsupport/src/chown.c index cc579b40a5..8496cc684b 100644 --- a/c/src/exec/libcsupport/src/chown.c +++ b/c/src/exec/libcsupport/src/chown.c @@ -33,15 +33,13 @@ int chown( return -1; if ( !loc.ops->chown ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->chown)( &loc, owner, group ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/exec/libcsupport/src/link.c b/c/src/exec/libcsupport/src/link.c index 38ce78d87a..c12398746d 100644 --- a/c/src/exec/libcsupport/src/link.c +++ b/c/src/exec/libcsupport/src/link.c @@ -44,8 +44,7 @@ int link( rtems_filesystem_get_start_loc( new, &i, &parent_loc ); result = (*parent_loc.ops->evalformake)( &new[i], &parent_loc, &name_start ); if ( result != 0 ) { - if ( existing_loc.ops->freenod ) - (*existing_loc.ops->freenod)( &parent_loc ); + rtems_filesystem_freenode( &parent_loc ); set_errno_and_return_minus_one( result ); } @@ -55,33 +54,21 @@ int link( */ if ( parent_loc.mt_entry != existing_loc.mt_entry ) { - if ( existing_loc.ops->freenod ) - (*existing_loc.ops->freenod)( &existing_loc ); - - if ( parent_loc.ops->freenod ) - (*parent_loc.ops->freenod)( &parent_loc ); - + rtems_filesystem_freenode( &existing_loc ); + rtems_filesystem_freenode( &parent_loc ); set_errno_and_return_minus_one( EXDEV ); } if ( !parent_loc.ops->link ) { - - if ( existing_loc.ops->freenod ) - (*existing_loc.ops->freenod)( &existing_loc ); - - if ( parent_loc.ops->freenod ) - (*parent_loc.ops->freenod)( &parent_loc ); - + rtems_filesystem_freenode( &existing_loc ); + rtems_filesystem_freenode( &parent_loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*parent_loc.ops->link)( &existing_loc, &parent_loc, name_start ); - if ( existing_loc.ops->freenod ) - (*existing_loc.ops->freenod)( &existing_loc ); - - if ( parent_loc.ops->freenod ) - (*parent_loc.ops->freenod)( &parent_loc ); + rtems_filesystem_freenode( &existing_loc ); + rtems_filesystem_freenode( &parent_loc ); return result; } diff --git a/c/src/exec/libcsupport/src/mknod.c b/c/src/exec/libcsupport/src/mknod.c index 48444f8549..bd434e4efa 100644 --- a/c/src/exec/libcsupport/src/mknod.c +++ b/c/src/exec/libcsupport/src/mknod.c @@ -53,14 +53,13 @@ int mknod( return -1; if ( !temp_loc.ops->mknod ) { - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*temp_loc.ops->mknod)( name_start, mode, dev, &temp_loc ); - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + + rtems_filesystem_freenode( &temp_loc ); return result; } diff --git a/c/src/exec/libcsupport/src/mount.c b/c/src/exec/libcsupport/src/mount.c index 7feca2e468..f7e4b4b783 100644 --- a/c/src/exec/libcsupport/src/mount.c +++ b/c/src/exec/libcsupport/src/mount.c @@ -224,8 +224,7 @@ int mount( *mt_entry = temp_mt_entry; - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return 0; @@ -233,8 +232,7 @@ cleanup_and_bail: free( temp_mt_entry ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return -1; } diff --git a/c/src/exec/libcsupport/src/open.c b/c/src/exec/libcsupport/src/open.c index 1bd6ea5ec6..7f220d1ce7 100644 --- a/c/src/exec/libcsupport/src/open.c +++ b/c/src/exec/libcsupport/src/open.c @@ -179,9 +179,8 @@ done: set_errno_and_return_minus_one( rc ); } - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); - + rtems_filesystem_freenode( &loc ); + return iop - rtems_libio_iops; } diff --git a/c/src/exec/libcsupport/src/readlink.c b/c/src/exec/libcsupport/src/readlink.c index 2f7423f69e..6ca7488543 100644 --- a/c/src/exec/libcsupport/src/readlink.c +++ b/c/src/exec/libcsupport/src/readlink.c @@ -31,27 +31,23 @@ int readlink( return -1; if ( !loc.ops->node_type ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( EINVAL ); } if ( !loc.ops->readlink ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->readlink)( &loc, buf, bufsize ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/exec/libcsupport/src/rmdir.c b/c/src/exec/libcsupport/src/rmdir.c index 9e951adb18..806176beaf 100644 --- a/c/src/exec/libcsupport/src/rmdir.c +++ b/c/src/exec/libcsupport/src/rmdir.c @@ -40,14 +40,12 @@ int rmdir( */ if ( !loc.ops->node_type ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTDIR ); } @@ -56,15 +54,13 @@ int rmdir( */ if ( !loc.ops->rmnod ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->rmnod)( &loc ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/exec/libcsupport/src/stat.c b/c/src/exec/libcsupport/src/stat.c index ff1d0db618..8872b779d7 100644 --- a/c/src/exec/libcsupport/src/stat.c +++ b/c/src/exec/libcsupport/src/stat.c @@ -59,8 +59,7 @@ int _STAT_NAME( return -1; if ( !loc.handlers->fstat ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } @@ -73,8 +72,7 @@ int _STAT_NAME( status = (*loc.handlers->fstat)( &loc, buf ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return status; } diff --git a/c/src/exec/libcsupport/src/symlink.c b/c/src/exec/libcsupport/src/symlink.c index b5c6013b07..ceb1025239 100644 --- a/c/src/exec/libcsupport/src/symlink.c +++ b/c/src/exec/libcsupport/src/symlink.c @@ -31,8 +31,7 @@ int symlink( result = (*loc.ops->symlink)( &loc, actualpath, name_start); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/exec/libcsupport/src/unlink.c b/c/src/exec/libcsupport/src/unlink.c index b4374e53c9..9e9f2c0e08 100644 --- a/c/src/exec/libcsupport/src/unlink.c +++ b/c/src/exec/libcsupport/src/unlink.c @@ -32,27 +32,23 @@ int unlink( return -1; if ( !loc.ops->node_type ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( EISDIR ); } if ( !loc.ops->unlink ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->unlink)( &loc ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/exec/libcsupport/src/unmount.c b/c/src/exec/libcsupport/src/unmount.c index b32d9b0caa..50827fc804 100644 --- a/c/src/exec/libcsupport/src/unmount.c +++ b/c/src/exec/libcsupport/src/unmount.c @@ -84,8 +84,7 @@ int unmount( */ if ( rtems_filesystem_current.mt_entry == temp_loc.mt_entry ) { - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); set_errno_and_return_minus_one( EBUSY ); } @@ -96,8 +95,7 @@ int unmount( */ if ( rtems_libio_is_open_files_in_fs( temp_loc.mt_entry ) == 1 ) { - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); set_errno_and_return_minus_one( EBUSY ); } @@ -110,8 +108,7 @@ int unmount( */ if ((temp_mt_entry.mt_point_node.ops->unmount )( temp_loc.mt_entry ) != 0 ) { - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); return -1; } @@ -120,9 +117,8 @@ int unmount( */ if ((temp_mt_entry.mt_fs_root.ops->fsunmount_me )( temp_loc.mt_entry ) != 0){ - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); - return -1; + rtems_filesystem_freenode( &temp_loc ); + return -1; } /* @@ -142,8 +138,7 @@ int unmount( */ free( temp_loc.mt_entry ); - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); return result; diff --git a/c/src/exec/libcsupport/src/utime.c b/c/src/exec/libcsupport/src/utime.c index ccc92d044e..b7987c87b4 100644 --- a/c/src/exec/libcsupport/src/utime.c +++ b/c/src/exec/libcsupport/src/utime.c @@ -34,8 +34,7 @@ int utime( result = (*temp_loc.ops->utime)( &temp_loc, times->actime, times->modtime ); - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); return result; } diff --git a/c/src/exec/libfs/src/imfs/ioman.c b/c/src/exec/libfs/src/imfs/ioman.c index ca8734913c..41106fa1c7 100644 --- a/c/src/exec/libfs/src/imfs/ioman.c +++ b/c/src/exec/libfs/src/imfs/ioman.c @@ -85,8 +85,7 @@ rtems_status_code rtems_io_lookup_name( if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { *device_info = 0; - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return RTEMS_UNSATISFIED; } @@ -96,8 +95,7 @@ rtems_status_code rtems_io_lookup_name( device.minor = the_jnode->info.device.minor; *device_info = &device; - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); #endif return RTEMS_SUCCESSFUL; diff --git a/c/src/lib/include/rtems/libio_.h b/c/src/lib/include/rtems/libio_.h index 029bb437dd..8c186278fa 100644 --- a/c/src/lib/include/rtems/libio_.h +++ b/c/src/lib/include/rtems/libio_.h @@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask; } \ } while (0) +/* + * rtems_filesystem_freenode + * + * Macro to free a node. + */ + +#define rtems_filesystem_freenode( _node ) \ + do { \ + if ( (_node)->ops->freenod ) \ + (*(_node)->ops->freenod)( (_node) ); \ + } while (0) + /* * rtems_filesystem_is_separator * diff --git a/c/src/lib/libc/chdir.c b/c/src/lib/libc/chdir.c index 4b3c313f7b..38f64d8c56 100644 --- a/c/src/lib/libc/chdir.c +++ b/c/src/lib/libc/chdir.c @@ -39,19 +39,16 @@ int chdir( */ if ( !loc.ops->node_type ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTDIR ); } - if ( rtems_filesystem_current.ops->freenod ) - (*rtems_filesystem_current.ops->freenod)( &rtems_filesystem_current ); + rtems_filesystem_freenode( &rtems_filesystem_current ); rtems_filesystem_current = loc; diff --git a/c/src/lib/libc/chmod.c b/c/src/lib/libc/chmod.c index acfc142ad0..70ef5a3dff 100644 --- a/c/src/lib/libc/chmod.c +++ b/c/src/lib/libc/chmod.c @@ -35,15 +35,13 @@ int chmod( return -1; if ( !loc.handlers->fchmod ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.handlers->fchmod)( &loc, mode ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/lib/libc/chown.c b/c/src/lib/libc/chown.c index cc579b40a5..8496cc684b 100644 --- a/c/src/lib/libc/chown.c +++ b/c/src/lib/libc/chown.c @@ -33,15 +33,13 @@ int chown( return -1; if ( !loc.ops->chown ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->chown)( &loc, owner, group ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/lib/libc/ioman.c b/c/src/lib/libc/ioman.c index ca8734913c..41106fa1c7 100644 --- a/c/src/lib/libc/ioman.c +++ b/c/src/lib/libc/ioman.c @@ -85,8 +85,7 @@ rtems_status_code rtems_io_lookup_name( if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { *device_info = 0; - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return RTEMS_UNSATISFIED; } @@ -96,8 +95,7 @@ rtems_status_code rtems_io_lookup_name( device.minor = the_jnode->info.device.minor; *device_info = &device; - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); #endif return RTEMS_SUCCESSFUL; diff --git a/c/src/lib/libc/libio_.h b/c/src/lib/libc/libio_.h index 029bb437dd..8c186278fa 100644 --- a/c/src/lib/libc/libio_.h +++ b/c/src/lib/libc/libio_.h @@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask; } \ } while (0) +/* + * rtems_filesystem_freenode + * + * Macro to free a node. + */ + +#define rtems_filesystem_freenode( _node ) \ + do { \ + if ( (_node)->ops->freenod ) \ + (*(_node)->ops->freenod)( (_node) ); \ + } while (0) + /* * rtems_filesystem_is_separator * diff --git a/c/src/lib/libc/link.c b/c/src/lib/libc/link.c index 38ce78d87a..c12398746d 100644 --- a/c/src/lib/libc/link.c +++ b/c/src/lib/libc/link.c @@ -44,8 +44,7 @@ int link( rtems_filesystem_get_start_loc( new, &i, &parent_loc ); result = (*parent_loc.ops->evalformake)( &new[i], &parent_loc, &name_start ); if ( result != 0 ) { - if ( existing_loc.ops->freenod ) - (*existing_loc.ops->freenod)( &parent_loc ); + rtems_filesystem_freenode( &parent_loc ); set_errno_and_return_minus_one( result ); } @@ -55,33 +54,21 @@ int link( */ if ( parent_loc.mt_entry != existing_loc.mt_entry ) { - if ( existing_loc.ops->freenod ) - (*existing_loc.ops->freenod)( &existing_loc ); - - if ( parent_loc.ops->freenod ) - (*parent_loc.ops->freenod)( &parent_loc ); - + rtems_filesystem_freenode( &existing_loc ); + rtems_filesystem_freenode( &parent_loc ); set_errno_and_return_minus_one( EXDEV ); } if ( !parent_loc.ops->link ) { - - if ( existing_loc.ops->freenod ) - (*existing_loc.ops->freenod)( &existing_loc ); - - if ( parent_loc.ops->freenod ) - (*parent_loc.ops->freenod)( &parent_loc ); - + rtems_filesystem_freenode( &existing_loc ); + rtems_filesystem_freenode( &parent_loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*parent_loc.ops->link)( &existing_loc, &parent_loc, name_start ); - if ( existing_loc.ops->freenod ) - (*existing_loc.ops->freenod)( &existing_loc ); - - if ( parent_loc.ops->freenod ) - (*parent_loc.ops->freenod)( &parent_loc ); + rtems_filesystem_freenode( &existing_loc ); + rtems_filesystem_freenode( &parent_loc ); return result; } diff --git a/c/src/lib/libc/mknod.c b/c/src/lib/libc/mknod.c index 48444f8549..bd434e4efa 100644 --- a/c/src/lib/libc/mknod.c +++ b/c/src/lib/libc/mknod.c @@ -53,14 +53,13 @@ int mknod( return -1; if ( !temp_loc.ops->mknod ) { - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*temp_loc.ops->mknod)( name_start, mode, dev, &temp_loc ); - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + + rtems_filesystem_freenode( &temp_loc ); return result; } diff --git a/c/src/lib/libc/mount.c b/c/src/lib/libc/mount.c index 7feca2e468..f7e4b4b783 100644 --- a/c/src/lib/libc/mount.c +++ b/c/src/lib/libc/mount.c @@ -224,8 +224,7 @@ int mount( *mt_entry = temp_mt_entry; - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return 0; @@ -233,8 +232,7 @@ cleanup_and_bail: free( temp_mt_entry ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return -1; } diff --git a/c/src/lib/libc/open.c b/c/src/lib/libc/open.c index 1bd6ea5ec6..7f220d1ce7 100644 --- a/c/src/lib/libc/open.c +++ b/c/src/lib/libc/open.c @@ -179,9 +179,8 @@ done: set_errno_and_return_minus_one( rc ); } - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); - + rtems_filesystem_freenode( &loc ); + return iop - rtems_libio_iops; } diff --git a/c/src/lib/libc/readlink.c b/c/src/lib/libc/readlink.c index 2f7423f69e..6ca7488543 100644 --- a/c/src/lib/libc/readlink.c +++ b/c/src/lib/libc/readlink.c @@ -31,27 +31,23 @@ int readlink( return -1; if ( !loc.ops->node_type ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( EINVAL ); } if ( !loc.ops->readlink ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->readlink)( &loc, buf, bufsize ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/lib/libc/rmdir.c b/c/src/lib/libc/rmdir.c index 9e951adb18..806176beaf 100644 --- a/c/src/lib/libc/rmdir.c +++ b/c/src/lib/libc/rmdir.c @@ -40,14 +40,12 @@ int rmdir( */ if ( !loc.ops->node_type ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTDIR ); } @@ -56,15 +54,13 @@ int rmdir( */ if ( !loc.ops->rmnod ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->rmnod)( &loc ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/lib/libc/stat.c b/c/src/lib/libc/stat.c index ff1d0db618..8872b779d7 100644 --- a/c/src/lib/libc/stat.c +++ b/c/src/lib/libc/stat.c @@ -59,8 +59,7 @@ int _STAT_NAME( return -1; if ( !loc.handlers->fstat ){ - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } @@ -73,8 +72,7 @@ int _STAT_NAME( status = (*loc.handlers->fstat)( &loc, buf ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return status; } diff --git a/c/src/lib/libc/symlink.c b/c/src/lib/libc/symlink.c index b5c6013b07..ceb1025239 100644 --- a/c/src/lib/libc/symlink.c +++ b/c/src/lib/libc/symlink.c @@ -31,8 +31,7 @@ int symlink( result = (*loc.ops->symlink)( &loc, actualpath, name_start); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/lib/libc/unlink.c b/c/src/lib/libc/unlink.c index b4374e53c9..9e9f2c0e08 100644 --- a/c/src/lib/libc/unlink.c +++ b/c/src/lib/libc/unlink.c @@ -32,27 +32,23 @@ int unlink( return -1; if ( !loc.ops->node_type ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } if ( (*loc.ops->node_type)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( EISDIR ); } if ( !loc.ops->unlink ) { - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); set_errno_and_return_minus_one( ENOTSUP ); } result = (*loc.ops->unlink)( &loc ); - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return result; } diff --git a/c/src/lib/libc/unmount.c b/c/src/lib/libc/unmount.c index b32d9b0caa..50827fc804 100644 --- a/c/src/lib/libc/unmount.c +++ b/c/src/lib/libc/unmount.c @@ -84,8 +84,7 @@ int unmount( */ if ( rtems_filesystem_current.mt_entry == temp_loc.mt_entry ) { - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); set_errno_and_return_minus_one( EBUSY ); } @@ -96,8 +95,7 @@ int unmount( */ if ( rtems_libio_is_open_files_in_fs( temp_loc.mt_entry ) == 1 ) { - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); set_errno_and_return_minus_one( EBUSY ); } @@ -110,8 +108,7 @@ int unmount( */ if ((temp_mt_entry.mt_point_node.ops->unmount )( temp_loc.mt_entry ) != 0 ) { - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); return -1; } @@ -120,9 +117,8 @@ int unmount( */ if ((temp_mt_entry.mt_fs_root.ops->fsunmount_me )( temp_loc.mt_entry ) != 0){ - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); - return -1; + rtems_filesystem_freenode( &temp_loc ); + return -1; } /* @@ -142,8 +138,7 @@ int unmount( */ free( temp_loc.mt_entry ); - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); return result; diff --git a/c/src/lib/libc/utime.c b/c/src/lib/libc/utime.c index ccc92d044e..b7987c87b4 100644 --- a/c/src/lib/libc/utime.c +++ b/c/src/lib/libc/utime.c @@ -34,8 +34,7 @@ int utime( result = (*temp_loc.ops->utime)( &temp_loc, times->actime, times->modtime ); - if ( temp_loc.ops->freenod ) - (*temp_loc.ops->freenod)( &temp_loc ); + rtems_filesystem_freenode( &temp_loc ); return result; } diff --git a/c/src/libfs/src/imfs/ioman.c b/c/src/libfs/src/imfs/ioman.c index ca8734913c..41106fa1c7 100644 --- a/c/src/libfs/src/imfs/ioman.c +++ b/c/src/libfs/src/imfs/ioman.c @@ -85,8 +85,7 @@ rtems_status_code rtems_io_lookup_name( if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { *device_info = 0; - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); return RTEMS_UNSATISFIED; } @@ -96,8 +95,7 @@ rtems_status_code rtems_io_lookup_name( device.minor = the_jnode->info.device.minor; *device_info = &device; - if ( loc.ops->freenod ) - (*loc.ops->freenod)( &loc ); + rtems_filesystem_freenode( &loc ); #endif return RTEMS_SUCCESSFUL; -- cgit v1.2.3