mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-22 05:47:56 +08:00
2010-02-16 Chris Johns <chrisj@rtems.org>
* libcsupport/src/open.c: Tighten the open handler check. 2010-02-16 Sebastian Huber <sebastian.huber@embedded-brains.de> * libcsupport/src/rmdir.c, libcsupport/src/unlink.c: Free the allocated pathloc.
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
2010-02-16 Chris Johns <chrisj@rtems.org>
|
||||
|
||||
* libcsupport/src/open.c: Tighten the open handler check.
|
||||
|
||||
2010-02-16 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
* libcsupport/src/rmdir.c, libcsupport/src/unlink.c: Free the
|
||||
allocated pathloc.
|
||||
|
||||
2010-02-01 Chris Johns <chrisj@rtems.org>
|
||||
|
||||
* libmisc/shell/fts.c: Updated to the latest NetBSD version to
|
||||
|
||||
@@ -158,7 +158,7 @@ int open(
|
||||
iop->flags |= rtems_libio_fcntl_flags( flags );
|
||||
iop->pathinfo = loc;
|
||||
|
||||
if ( !iop->handlers->open_h ) {
|
||||
if ( !iop->handlers || !iop->handlers->open_h ) {
|
||||
rc = ENOTSUP;
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ int rmdir(
|
||||
rtems_filesystem_location_info_t loc;
|
||||
int i;
|
||||
int result;
|
||||
bool free_parentloc = false;
|
||||
|
||||
/*
|
||||
* Get the parent node of the node we wish to remove. Find the parent path.
|
||||
@@ -50,6 +51,8 @@ int rmdir(
|
||||
false );
|
||||
if ( result != 0 )
|
||||
return -1;
|
||||
|
||||
free_parentloc = true;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -63,7 +66,8 @@ int rmdir(
|
||||
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
|
||||
0, &loc, false );
|
||||
if ( result != 0 ) {
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -73,13 +77,15 @@ int rmdir(
|
||||
|
||||
if ( !loc.ops->node_type_h ){
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
if ( (*loc.ops->node_type_h)( &loc ) != RTEMS_FILESYSTEM_DIRECTORY ){
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTDIR );
|
||||
}
|
||||
|
||||
@@ -89,14 +95,16 @@ int rmdir(
|
||||
|
||||
if ( !loc.handlers->rmnod_h ){
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
result = (*loc.handlers->rmnod_h)( &parentloc, &loc );
|
||||
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ int unlink(
|
||||
rtems_filesystem_location_info_t loc;
|
||||
int i;
|
||||
int result;
|
||||
bool free_parentloc = false;
|
||||
|
||||
/*
|
||||
* Get the node to be unlinked. Find the parent path first.
|
||||
@@ -46,6 +47,8 @@ int unlink(
|
||||
false );
|
||||
if ( result != 0 )
|
||||
return -1;
|
||||
|
||||
free_parentloc = true;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -59,32 +62,37 @@ int unlink(
|
||||
result = rtems_filesystem_evaluate_relative_path( name , strlen( name ),
|
||||
0, &loc, false );
|
||||
if ( result != 0 ) {
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( !loc.ops->node_type_h ) {
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
if ( (*loc.ops->node_type_h)( &loc ) == RTEMS_FILESYSTEM_DIRECTORY ) {
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
rtems_set_errno_and_return_minus_one( EISDIR );
|
||||
}
|
||||
|
||||
if ( !loc.ops->unlink_h ) {
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
rtems_set_errno_and_return_minus_one( ENOTSUP );
|
||||
}
|
||||
|
||||
result = (*loc.ops->unlink_h)( &parentloc, &loc );
|
||||
|
||||
rtems_filesystem_freenode( &loc );
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
if ( free_parentloc )
|
||||
rtems_filesystem_freenode( &parentloc );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user