Added rtems_filesystem_freenode() macro and added calls at appropriate

places to make sure memory allocated for filesystem specifif nodes
gets freed.
This commit is contained in:
Joel Sherrill
1999-10-12 19:10:46 +00:00
parent e2116f9003
commit dd0f32614c
52 changed files with 209 additions and 280 deletions

View File

@@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask;
} \ } \
} while (0) } 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 * rtems_filesystem_is_separator
* *

View File

@@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask;
} \ } \
} while (0) } 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 * rtems_filesystem_is_separator
* *

View File

@@ -39,19 +39,16 @@ int chdir(
*/ */
if ( !loc.ops->node_type ) { if ( !loc.ops->node_type ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTDIR ); set_errno_and_return_minus_one( ENOTDIR );
} }
if ( rtems_filesystem_current.ops->freenod ) rtems_filesystem_freenode( &rtems_filesystem_current );
(*rtems_filesystem_current.ops->freenod)( &rtems_filesystem_current );
rtems_filesystem_current = loc; rtems_filesystem_current = loc;

View File

@@ -35,15 +35,13 @@ int chmod(
return -1; return -1;
if ( !loc.handlers->fchmod ){ if ( !loc.handlers->fchmod ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.handlers->fchmod)( &loc, mode ); result = (*loc.handlers->fchmod)( &loc, mode );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -33,15 +33,13 @@ int chown(
return -1; return -1;
if ( !loc.ops->chown ) { if ( !loc.ops->chown ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->chown)( &loc, owner, group ); result = (*loc.ops->chown)( &loc, owner, group );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -44,8 +44,7 @@ int link(
rtems_filesystem_get_start_loc( new, &i, &parent_loc ); rtems_filesystem_get_start_loc( new, &i, &parent_loc );
result = (*parent_loc.ops->evalformake)( &new[i], &parent_loc, &name_start ); result = (*parent_loc.ops->evalformake)( &new[i], &parent_loc, &name_start );
if ( result != 0 ) { if ( result != 0 ) {
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &parent_loc );
(*existing_loc.ops->freenod)( &parent_loc );
set_errno_and_return_minus_one( result ); set_errno_and_return_minus_one( result );
} }
@@ -55,33 +54,21 @@ int link(
*/ */
if ( parent_loc.mt_entry != existing_loc.mt_entry ) { if ( parent_loc.mt_entry != existing_loc.mt_entry ) {
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &existing_loc );
(*existing_loc.ops->freenod)( &existing_loc ); rtems_filesystem_freenode( &parent_loc );
if ( parent_loc.ops->freenod )
(*parent_loc.ops->freenod)( &parent_loc );
set_errno_and_return_minus_one( EXDEV ); set_errno_and_return_minus_one( EXDEV );
} }
if ( !parent_loc.ops->link ) { if ( !parent_loc.ops->link ) {
rtems_filesystem_freenode( &existing_loc );
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &parent_loc );
(*existing_loc.ops->freenod)( &existing_loc );
if ( parent_loc.ops->freenod )
(*parent_loc.ops->freenod)( &parent_loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*parent_loc.ops->link)( &existing_loc, &parent_loc, name_start ); result = (*parent_loc.ops->link)( &existing_loc, &parent_loc, name_start );
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &existing_loc );
(*existing_loc.ops->freenod)( &existing_loc ); rtems_filesystem_freenode( &parent_loc );
if ( parent_loc.ops->freenod )
(*parent_loc.ops->freenod)( &parent_loc );
return result; return result;
} }

View File

@@ -53,14 +53,13 @@ int mknod(
return -1; return -1;
if ( !temp_loc.ops->mknod ) { if ( !temp_loc.ops->mknod ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*temp_loc.ops->mknod)( name_start, mode, dev, &temp_loc ); 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; return result;
} }

View File

@@ -224,8 +224,7 @@ int mount(
*mt_entry = temp_mt_entry; *mt_entry = temp_mt_entry;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return 0; return 0;
@@ -233,8 +232,7 @@ cleanup_and_bail:
free( temp_mt_entry ); free( temp_mt_entry );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return -1; return -1;
} }

View File

@@ -179,8 +179,7 @@ done:
set_errno_and_return_minus_one( rc ); set_errno_and_return_minus_one( rc );
} }
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return iop - rtems_libio_iops; return iop - rtems_libio_iops;
} }

View File

@@ -31,27 +31,23 @@ int readlink(
return -1; return -1;
if ( !loc.ops->node_type ){ if ( !loc.ops->node_type ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){ if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( EINVAL ); set_errno_and_return_minus_one( EINVAL );
} }
if ( !loc.ops->readlink ){ if ( !loc.ops->readlink ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->readlink)( &loc, buf, bufsize ); result = (*loc.ops->readlink)( &loc, buf, bufsize );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -40,14 +40,12 @@ int rmdir(
*/ */
if ( !loc.ops->node_type ){ if ( !loc.ops->node_type ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){ if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTDIR ); set_errno_and_return_minus_one( ENOTDIR );
} }
@@ -56,15 +54,13 @@ int rmdir(
*/ */
if ( !loc.ops->rmnod ){ if ( !loc.ops->rmnod ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->rmnod)( &loc ); result = (*loc.ops->rmnod)( &loc );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -59,8 +59,7 @@ int _STAT_NAME(
return -1; return -1;
if ( !loc.handlers->fstat ){ if ( !loc.handlers->fstat ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
@@ -73,8 +72,7 @@ int _STAT_NAME(
status = (*loc.handlers->fstat)( &loc, buf ); status = (*loc.handlers->fstat)( &loc, buf );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return status; return status;
} }

View File

@@ -31,8 +31,7 @@ int symlink(
result = (*loc.ops->symlink)( &loc, actualpath, name_start); result = (*loc.ops->symlink)( &loc, actualpath, name_start);
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -32,27 +32,23 @@ int unlink(
return -1; return -1;
if ( !loc.ops->node_type ) { if ( !loc.ops->node_type ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { if ( (*loc.ops->node_type)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( EISDIR ); set_errno_and_return_minus_one( EISDIR );
} }
if ( !loc.ops->unlink ) { if ( !loc.ops->unlink ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->unlink)( &loc ); result = (*loc.ops->unlink)( &loc );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -84,8 +84,7 @@ int unmount(
*/ */
if ( rtems_filesystem_current.mt_entry == temp_loc.mt_entry ) { if ( rtems_filesystem_current.mt_entry == temp_loc.mt_entry ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
set_errno_and_return_minus_one( EBUSY ); 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 ( rtems_libio_is_open_files_in_fs( temp_loc.mt_entry ) == 1 ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
set_errno_and_return_minus_one( EBUSY ); 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_mt_entry.mt_point_node.ops->unmount )( temp_loc.mt_entry ) != 0 ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return -1; return -1;
} }
@@ -120,8 +117,7 @@ int unmount(
*/ */
if ((temp_mt_entry.mt_fs_root.ops->fsunmount_me )( temp_loc.mt_entry ) != 0){ if ((temp_mt_entry.mt_fs_root.ops->fsunmount_me )( temp_loc.mt_entry ) != 0){
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return -1; return -1;
} }
@@ -142,8 +138,7 @@ int unmount(
*/ */
free( temp_loc.mt_entry ); free( temp_loc.mt_entry );
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return result; return result;

View File

@@ -34,8 +34,7 @@ int utime(
result = (*temp_loc.ops->utime)( &temp_loc, times->actime, times->modtime ); result = (*temp_loc.ops->utime)( &temp_loc, times->actime, times->modtime );
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return result; return result;
} }

View File

@@ -85,8 +85,7 @@ rtems_status_code rtems_io_lookup_name(
if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {
*device_info = 0; *device_info = 0;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return RTEMS_UNSATISFIED; return RTEMS_UNSATISFIED;
} }
@@ -96,8 +95,7 @@ rtems_status_code rtems_io_lookup_name(
device.minor = the_jnode->info.device.minor; device.minor = the_jnode->info.device.minor;
*device_info = &device; *device_info = &device;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
#endif #endif
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;

View File

@@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask;
} \ } \
} while (0) } 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 * rtems_filesystem_is_separator
* *

View File

@@ -39,19 +39,16 @@ int chdir(
*/ */
if ( !loc.ops->node_type ) { if ( !loc.ops->node_type ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTDIR ); set_errno_and_return_minus_one( ENOTDIR );
} }
if ( rtems_filesystem_current.ops->freenod ) rtems_filesystem_freenode( &rtems_filesystem_current );
(*rtems_filesystem_current.ops->freenod)( &rtems_filesystem_current );
rtems_filesystem_current = loc; rtems_filesystem_current = loc;

View File

@@ -35,15 +35,13 @@ int chmod(
return -1; return -1;
if ( !loc.handlers->fchmod ){ if ( !loc.handlers->fchmod ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.handlers->fchmod)( &loc, mode ); result = (*loc.handlers->fchmod)( &loc, mode );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -33,15 +33,13 @@ int chown(
return -1; return -1;
if ( !loc.ops->chown ) { if ( !loc.ops->chown ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->chown)( &loc, owner, group ); result = (*loc.ops->chown)( &loc, owner, group );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -85,8 +85,7 @@ rtems_status_code rtems_io_lookup_name(
if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {
*device_info = 0; *device_info = 0;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return RTEMS_UNSATISFIED; return RTEMS_UNSATISFIED;
} }
@@ -96,8 +95,7 @@ rtems_status_code rtems_io_lookup_name(
device.minor = the_jnode->info.device.minor; device.minor = the_jnode->info.device.minor;
*device_info = &device; *device_info = &device;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
#endif #endif
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;

View File

@@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask;
} \ } \
} while (0) } 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 * rtems_filesystem_is_separator
* *

View File

@@ -44,8 +44,7 @@ int link(
rtems_filesystem_get_start_loc( new, &i, &parent_loc ); rtems_filesystem_get_start_loc( new, &i, &parent_loc );
result = (*parent_loc.ops->evalformake)( &new[i], &parent_loc, &name_start ); result = (*parent_loc.ops->evalformake)( &new[i], &parent_loc, &name_start );
if ( result != 0 ) { if ( result != 0 ) {
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &parent_loc );
(*existing_loc.ops->freenod)( &parent_loc );
set_errno_and_return_minus_one( result ); set_errno_and_return_minus_one( result );
} }
@@ -55,33 +54,21 @@ int link(
*/ */
if ( parent_loc.mt_entry != existing_loc.mt_entry ) { if ( parent_loc.mt_entry != existing_loc.mt_entry ) {
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &existing_loc );
(*existing_loc.ops->freenod)( &existing_loc ); rtems_filesystem_freenode( &parent_loc );
if ( parent_loc.ops->freenod )
(*parent_loc.ops->freenod)( &parent_loc );
set_errno_and_return_minus_one( EXDEV ); set_errno_and_return_minus_one( EXDEV );
} }
if ( !parent_loc.ops->link ) { if ( !parent_loc.ops->link ) {
rtems_filesystem_freenode( &existing_loc );
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &parent_loc );
(*existing_loc.ops->freenod)( &existing_loc );
if ( parent_loc.ops->freenod )
(*parent_loc.ops->freenod)( &parent_loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*parent_loc.ops->link)( &existing_loc, &parent_loc, name_start ); result = (*parent_loc.ops->link)( &existing_loc, &parent_loc, name_start );
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &existing_loc );
(*existing_loc.ops->freenod)( &existing_loc ); rtems_filesystem_freenode( &parent_loc );
if ( parent_loc.ops->freenod )
(*parent_loc.ops->freenod)( &parent_loc );
return result; return result;
} }

View File

@@ -53,14 +53,13 @@ int mknod(
return -1; return -1;
if ( !temp_loc.ops->mknod ) { if ( !temp_loc.ops->mknod ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*temp_loc.ops->mknod)( name_start, mode, dev, &temp_loc ); 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; return result;
} }

View File

@@ -224,8 +224,7 @@ int mount(
*mt_entry = temp_mt_entry; *mt_entry = temp_mt_entry;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return 0; return 0;
@@ -233,8 +232,7 @@ cleanup_and_bail:
free( temp_mt_entry ); free( temp_mt_entry );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return -1; return -1;
} }

View File

@@ -179,8 +179,7 @@ done:
set_errno_and_return_minus_one( rc ); set_errno_and_return_minus_one( rc );
} }
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return iop - rtems_libio_iops; return iop - rtems_libio_iops;
} }

View File

@@ -31,27 +31,23 @@ int readlink(
return -1; return -1;
if ( !loc.ops->node_type ){ if ( !loc.ops->node_type ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){ if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( EINVAL ); set_errno_and_return_minus_one( EINVAL );
} }
if ( !loc.ops->readlink ){ if ( !loc.ops->readlink ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->readlink)( &loc, buf, bufsize ); result = (*loc.ops->readlink)( &loc, buf, bufsize );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -40,14 +40,12 @@ int rmdir(
*/ */
if ( !loc.ops->node_type ){ if ( !loc.ops->node_type ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){ if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTDIR ); set_errno_and_return_minus_one( ENOTDIR );
} }
@@ -56,15 +54,13 @@ int rmdir(
*/ */
if ( !loc.ops->rmnod ){ if ( !loc.ops->rmnod ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->rmnod)( &loc ); result = (*loc.ops->rmnod)( &loc );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -59,8 +59,7 @@ int _STAT_NAME(
return -1; return -1;
if ( !loc.handlers->fstat ){ if ( !loc.handlers->fstat ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
@@ -73,8 +72,7 @@ int _STAT_NAME(
status = (*loc.handlers->fstat)( &loc, buf ); status = (*loc.handlers->fstat)( &loc, buf );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return status; return status;
} }

View File

@@ -31,8 +31,7 @@ int symlink(
result = (*loc.ops->symlink)( &loc, actualpath, name_start); result = (*loc.ops->symlink)( &loc, actualpath, name_start);
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -32,27 +32,23 @@ int unlink(
return -1; return -1;
if ( !loc.ops->node_type ) { if ( !loc.ops->node_type ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { if ( (*loc.ops->node_type)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( EISDIR ); set_errno_and_return_minus_one( EISDIR );
} }
if ( !loc.ops->unlink ) { if ( !loc.ops->unlink ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->unlink)( &loc ); result = (*loc.ops->unlink)( &loc );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -84,8 +84,7 @@ int unmount(
*/ */
if ( rtems_filesystem_current.mt_entry == temp_loc.mt_entry ) { if ( rtems_filesystem_current.mt_entry == temp_loc.mt_entry ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
set_errno_and_return_minus_one( EBUSY ); 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 ( rtems_libio_is_open_files_in_fs( temp_loc.mt_entry ) == 1 ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
set_errno_and_return_minus_one( EBUSY ); 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_mt_entry.mt_point_node.ops->unmount )( temp_loc.mt_entry ) != 0 ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return -1; return -1;
} }
@@ -120,8 +117,7 @@ int unmount(
*/ */
if ((temp_mt_entry.mt_fs_root.ops->fsunmount_me )( temp_loc.mt_entry ) != 0){ if ((temp_mt_entry.mt_fs_root.ops->fsunmount_me )( temp_loc.mt_entry ) != 0){
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return -1; return -1;
} }
@@ -142,8 +138,7 @@ int unmount(
*/ */
free( temp_loc.mt_entry ); free( temp_loc.mt_entry );
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return result; return result;

View File

@@ -34,8 +34,7 @@ int utime(
result = (*temp_loc.ops->utime)( &temp_loc, times->actime, times->modtime ); result = (*temp_loc.ops->utime)( &temp_loc, times->actime, times->modtime );
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return result; return result;
} }

View File

@@ -85,8 +85,7 @@ rtems_status_code rtems_io_lookup_name(
if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {
*device_info = 0; *device_info = 0;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return RTEMS_UNSATISFIED; return RTEMS_UNSATISFIED;
} }
@@ -96,8 +95,7 @@ rtems_status_code rtems_io_lookup_name(
device.minor = the_jnode->info.device.minor; device.minor = the_jnode->info.device.minor;
*device_info = &device; *device_info = &device;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
#endif #endif
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;

View File

@@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask;
} \ } \
} while (0) } 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 * rtems_filesystem_is_separator
* *

View File

@@ -160,6 +160,18 @@ extern mode_t rtems_filesystem_umask;
} \ } \
} while (0) } 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 * rtems_filesystem_is_separator
* *

View File

@@ -39,19 +39,16 @@ int chdir(
*/ */
if ( !loc.ops->node_type ) { if ( !loc.ops->node_type ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) { if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTDIR ); set_errno_and_return_minus_one( ENOTDIR );
} }
if ( rtems_filesystem_current.ops->freenod ) rtems_filesystem_freenode( &rtems_filesystem_current );
(*rtems_filesystem_current.ops->freenod)( &rtems_filesystem_current );
rtems_filesystem_current = loc; rtems_filesystem_current = loc;

View File

@@ -35,15 +35,13 @@ int chmod(
return -1; return -1;
if ( !loc.handlers->fchmod ){ if ( !loc.handlers->fchmod ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.handlers->fchmod)( &loc, mode ); result = (*loc.handlers->fchmod)( &loc, mode );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -33,15 +33,13 @@ int chown(
return -1; return -1;
if ( !loc.ops->chown ) { if ( !loc.ops->chown ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->chown)( &loc, owner, group ); result = (*loc.ops->chown)( &loc, owner, group );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -44,8 +44,7 @@ int link(
rtems_filesystem_get_start_loc( new, &i, &parent_loc ); rtems_filesystem_get_start_loc( new, &i, &parent_loc );
result = (*parent_loc.ops->evalformake)( &new[i], &parent_loc, &name_start ); result = (*parent_loc.ops->evalformake)( &new[i], &parent_loc, &name_start );
if ( result != 0 ) { if ( result != 0 ) {
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &parent_loc );
(*existing_loc.ops->freenod)( &parent_loc );
set_errno_and_return_minus_one( result ); set_errno_and_return_minus_one( result );
} }
@@ -55,33 +54,21 @@ int link(
*/ */
if ( parent_loc.mt_entry != existing_loc.mt_entry ) { if ( parent_loc.mt_entry != existing_loc.mt_entry ) {
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &existing_loc );
(*existing_loc.ops->freenod)( &existing_loc ); rtems_filesystem_freenode( &parent_loc );
if ( parent_loc.ops->freenod )
(*parent_loc.ops->freenod)( &parent_loc );
set_errno_and_return_minus_one( EXDEV ); set_errno_and_return_minus_one( EXDEV );
} }
if ( !parent_loc.ops->link ) { if ( !parent_loc.ops->link ) {
rtems_filesystem_freenode( &existing_loc );
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &parent_loc );
(*existing_loc.ops->freenod)( &existing_loc );
if ( parent_loc.ops->freenod )
(*parent_loc.ops->freenod)( &parent_loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*parent_loc.ops->link)( &existing_loc, &parent_loc, name_start ); result = (*parent_loc.ops->link)( &existing_loc, &parent_loc, name_start );
if ( existing_loc.ops->freenod ) rtems_filesystem_freenode( &existing_loc );
(*existing_loc.ops->freenod)( &existing_loc ); rtems_filesystem_freenode( &parent_loc );
if ( parent_loc.ops->freenod )
(*parent_loc.ops->freenod)( &parent_loc );
return result; return result;
} }

View File

@@ -53,14 +53,13 @@ int mknod(
return -1; return -1;
if ( !temp_loc.ops->mknod ) { if ( !temp_loc.ops->mknod ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*temp_loc.ops->mknod)( name_start, mode, dev, &temp_loc ); 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; return result;
} }

View File

@@ -224,8 +224,7 @@ int mount(
*mt_entry = temp_mt_entry; *mt_entry = temp_mt_entry;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return 0; return 0;
@@ -233,8 +232,7 @@ cleanup_and_bail:
free( temp_mt_entry ); free( temp_mt_entry );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return -1; return -1;
} }

View File

@@ -179,8 +179,7 @@ done:
set_errno_and_return_minus_one( rc ); set_errno_and_return_minus_one( rc );
} }
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return iop - rtems_libio_iops; return iop - rtems_libio_iops;
} }

View File

@@ -31,27 +31,23 @@ int readlink(
return -1; return -1;
if ( !loc.ops->node_type ){ if ( !loc.ops->node_type ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){ if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_SYM_LINK ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( EINVAL ); set_errno_and_return_minus_one( EINVAL );
} }
if ( !loc.ops->readlink ){ if ( !loc.ops->readlink ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->readlink)( &loc, buf, bufsize ); result = (*loc.ops->readlink)( &loc, buf, bufsize );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -40,14 +40,12 @@ int rmdir(
*/ */
if ( !loc.ops->node_type ){ if ( !loc.ops->node_type ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){ if ( (*loc.ops->node_type)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTDIR ); set_errno_and_return_minus_one( ENOTDIR );
} }
@@ -56,15 +54,13 @@ int rmdir(
*/ */
if ( !loc.ops->rmnod ){ if ( !loc.ops->rmnod ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->rmnod)( &loc ); result = (*loc.ops->rmnod)( &loc );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -59,8 +59,7 @@ int _STAT_NAME(
return -1; return -1;
if ( !loc.handlers->fstat ){ if ( !loc.handlers->fstat ){
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
@@ -73,8 +72,7 @@ int _STAT_NAME(
status = (*loc.handlers->fstat)( &loc, buf ); status = (*loc.handlers->fstat)( &loc, buf );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return status; return status;
} }

View File

@@ -31,8 +31,7 @@ int symlink(
result = (*loc.ops->symlink)( &loc, actualpath, name_start); result = (*loc.ops->symlink)( &loc, actualpath, name_start);
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -32,27 +32,23 @@ int unlink(
return -1; return -1;
if ( !loc.ops->node_type ) { if ( !loc.ops->node_type ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
if ( (*loc.ops->node_type)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) { if ( (*loc.ops->node_type)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( EISDIR ); set_errno_and_return_minus_one( EISDIR );
} }
if ( !loc.ops->unlink ) { if ( !loc.ops->unlink ) {
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
set_errno_and_return_minus_one( ENOTSUP ); set_errno_and_return_minus_one( ENOTSUP );
} }
result = (*loc.ops->unlink)( &loc ); result = (*loc.ops->unlink)( &loc );
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return result; return result;
} }

View File

@@ -84,8 +84,7 @@ int unmount(
*/ */
if ( rtems_filesystem_current.mt_entry == temp_loc.mt_entry ) { if ( rtems_filesystem_current.mt_entry == temp_loc.mt_entry ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
set_errno_and_return_minus_one( EBUSY ); 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 ( rtems_libio_is_open_files_in_fs( temp_loc.mt_entry ) == 1 ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
set_errno_and_return_minus_one( EBUSY ); 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_mt_entry.mt_point_node.ops->unmount )( temp_loc.mt_entry ) != 0 ) {
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return -1; return -1;
} }
@@ -120,8 +117,7 @@ int unmount(
*/ */
if ((temp_mt_entry.mt_fs_root.ops->fsunmount_me )( temp_loc.mt_entry ) != 0){ if ((temp_mt_entry.mt_fs_root.ops->fsunmount_me )( temp_loc.mt_entry ) != 0){
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return -1; return -1;
} }
@@ -142,8 +138,7 @@ int unmount(
*/ */
free( temp_loc.mt_entry ); free( temp_loc.mt_entry );
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return result; return result;

View File

@@ -34,8 +34,7 @@ int utime(
result = (*temp_loc.ops->utime)( &temp_loc, times->actime, times->modtime ); result = (*temp_loc.ops->utime)( &temp_loc, times->actime, times->modtime );
if ( temp_loc.ops->freenod ) rtems_filesystem_freenode( &temp_loc );
(*temp_loc.ops->freenod)( &temp_loc );
return result; return result;
} }

View File

@@ -85,8 +85,7 @@ rtems_status_code rtems_io_lookup_name(
if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) { if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {
*device_info = 0; *device_info = 0;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
return RTEMS_UNSATISFIED; return RTEMS_UNSATISFIED;
} }
@@ -96,8 +95,7 @@ rtems_status_code rtems_io_lookup_name(
device.minor = the_jnode->info.device.minor; device.minor = the_jnode->info.device.minor;
*device_info = &device; *device_info = &device;
if ( loc.ops->freenod ) rtems_filesystem_freenode( &loc );
(*loc.ops->freenod)( &loc );
#endif #endif
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;