forked from Imagelibrary/rtems
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:
@@ -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 );
|
||||
|
||||
@@ -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 );
|
||||
|
||||
/*
|
||||
|
||||
@@ -131,12 +131,18 @@ int fcntl(
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
if ((ret >= 0) && iop->handlers->fcntl) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
@@ -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 ) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
/*
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user