2000-08-11 Chris Johns <ccj@acm.org>

* libc/chmod.c: Return ENOTSUP if filesystem does not have handler.
	* libc/eval.c: Ditto.
	* libc/fcntl.c: Ditto.
	* libc/fsync.c: Ditto.
	* libc/ioctl.c: Ditto.
	* libc/ioman.c: Ditto.
	* libc/link.c: Ditto.
	* libc/memfile.c: Ditto.
	* libc/mknod.c: Ditto.
	* libc/symlink.c: Ditto.
	* libc/libio.h(rtems_filesystem_dev_major_t): New macro.
	* libc/libio.h(rtems_filesystem_dev_minor_t): New macro.
This commit is contained in:
Joel Sherrill
2000-08-11 20:04:03 +00:00
parent 289f822131
commit 74835d7880
11 changed files with 58 additions and 7 deletions

View File

@@ -33,6 +33,11 @@ int chmod(
if ( status != 0 )
return -1;
if ( !loc.handlers ){
rtems_filesystem_freenode( &loc );
set_errno_and_return_minus_one( EBADF );
}
if ( !loc.handlers->fchmod ){
rtems_filesystem_freenode( &loc );
set_errno_and_return_minus_one( ENOTSUP );

View File

@@ -43,6 +43,9 @@ int rtems_filesystem_evaluate_path(
rtems_filesystem_get_start_loc( pathname, &i, pathloc );
if ( !pathloc->ops->evalpath )
set_errno_and_return_minus_one( ENOTSUP );
result = (*pathloc->ops->evalpath)( &pathname[i], flags, pathloc );
/*

View File

@@ -131,10 +131,16 @@ int fcntl(
ret = -1;
break;
}
if ((ret >= 0) && iop->handlers->fcntl) {
int err = (*iop->handlers->fcntl)( cmd, iop );
if (err) {
errno = err;
if (ret >= 0) {
if (iop->handlers->fcntl) {
int err = (*iop->handlers->fcntl)( cmd, iop );
if (err) {
errno = err;
ret = -1;
}
}
else {
errno = ENOTSUP;
ret = -1;
}
}

View File

@@ -30,6 +30,9 @@ int fsync(
* Now process the fsync().
*/
if ( !iop->handlers )
set_errno_and_return_minus_one( EBADF );
if ( !iop->handlers->fsync )
set_errno_and_return_minus_one( ENOTSUP );

View File

@@ -33,6 +33,9 @@ int ioctl(
* Now process the ioctl().
*/
if ( !iop->handlers )
set_errno_and_return_minus_one( EBADF );
if ( !iop->handlers->ioctl )
set_errno_and_return_minus_one( ENOTSUP );

View File

@@ -80,6 +80,11 @@ rtems_status_code rtems_io_lookup_name(
result = rtems_filesystem_evaluate_path( name, 0x00, &loc, TRUE );
the_jnode = loc.node_access;
if ( !loc.ops->node_type ) {
rtems_filesystem_freenode( &loc );
set_errno_and_return_minus_one( ENOTSUP );
}
node_type = (*loc.ops->node_type)( &loc );
if ( (result != 0) || node_type != RTEMS_FILESYSTEM_DEVICE ) {

View File

@@ -473,10 +473,16 @@ typedef int (*rtems_libio_lseek_t)(
#define rtems_filesystem_make_dev_t( _major, _minor ) \
((((dev_t)(_major)) << 32) | (dev_t)(_minor))
#define rtems_filesystem_dev_major_t( _dev ) \
(rtems_device_major_number) ((_dev) >> 32)
#define rtems_filesystem_dev_minor_t( _dev ) \
(rtems_device_minor_number) ((_dev) & 0xFFFFFFFF)
#define rtems_filesystem_split_dev_t( _dev, _major, _minor ) \
do { \
(_major) = (rtems_device_major_number) ((_dev) >> 32); \
(_minor) = (rtems_device_minor_number) ((_dev) & 0xFFFFFFFF); \
(_major) = rtems_filesystem_dev_major_t ( _dev ); \
(_minor) = rtems_filesystem_dev_minor_t( _dev ); \
} while(0)
/*

View File

@@ -41,8 +41,16 @@ int link(
*/
rtems_filesystem_get_start_loc( new, &i, &parent_loc );
if ( !parent_loc.ops->evalformake ) {
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
set_errno_and_return_minus_one( ENOTSUP );
}
result = (*parent_loc.ops->evalformake)( &new[i], &parent_loc, &name_start );
if ( result != 0 ) {
rtems_filesystem_freenode( &existing_loc );
rtems_filesystem_freenode( &parent_loc );
set_errno_and_return_minus_one( result );
}

View File

@@ -112,6 +112,9 @@ int memfile_close(
the_jnode = iop->file_info;
if (iop->flags & LIBIO_FLAGS_APPEND)
iop->offset = the_jnode->info.file.size;
return 0;
}
@@ -340,7 +343,6 @@ MEMFILE_STATIC int IMFS_memfile_addblock(
#endif
memory = memfile_alloc_block();
assert( memory );
if ( !memory )
return 1;
*block_entry_ptr = memory;

View File

@@ -43,6 +43,11 @@ int mknod(
rtems_filesystem_get_start_loc( pathname, &i, &temp_loc );
if ( !temp_loc.ops->evalformake ) {
rtems_filesystem_freenode( &temp_loc );
set_errno_and_return_minus_one( ENOTSUP );
}
result = (*temp_loc.ops->evalformake)(
&pathname[i],
&temp_loc,

View File

@@ -28,6 +28,11 @@ int symlink(
if ( result != 0 )
return -1;
if ( !loc.ops->symlink ) {
rtems_filesystem_freenode( &loc );
set_errno_and_return_minus_one( ENOTSUP );
}
result = (*loc.ops->symlink)( &loc, actualpath, name_start);
rtems_filesystem_freenode( &loc );