forked from Imagelibrary/rtems
@@ -89,6 +89,46 @@ extern rtems_filesystem_mount_table_entry_t rtems_filesystem_null_mt_entry;
|
|||||||
*/
|
*/
|
||||||
extern rtems_filesystem_global_location_t rtems_filesystem_global_location_null;
|
extern rtems_filesystem_global_location_t rtems_filesystem_global_location_null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sets the specified flags in the iop.
|
||||||
|
*
|
||||||
|
* @param[in] iop The iop.
|
||||||
|
* @param[in] set The flags to set.
|
||||||
|
*
|
||||||
|
* @return The previous flags.
|
||||||
|
*/
|
||||||
|
static inline uint32_t rtems_libio_iop_flags_set(
|
||||||
|
rtems_libio_t *iop,
|
||||||
|
uint32_t set
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
|
flags = iop->flags;
|
||||||
|
iop->flags = flags | set;
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clears the specified flags in the iop.
|
||||||
|
*
|
||||||
|
* @param[in] iop The iop.
|
||||||
|
* @param[in] clear The flags to clear.
|
||||||
|
*
|
||||||
|
* @return The previous flags.
|
||||||
|
*/
|
||||||
|
static inline uint32_t rtems_libio_iop_flags_clear(
|
||||||
|
rtems_libio_t *iop,
|
||||||
|
uint32_t clear
|
||||||
|
)
|
||||||
|
{
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
|
flags = iop->flags;
|
||||||
|
iop->flags = flags & ~clear;
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Maps a file descriptor to the iop.
|
* @brief Maps a file descriptor to the iop.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ int close(
|
|||||||
iop = rtems_libio_iop(fd);
|
iop = rtems_libio_iop(fd);
|
||||||
rtems_libio_check_is_open(iop);
|
rtems_libio_check_is_open(iop);
|
||||||
|
|
||||||
iop->flags &= ~LIBIO_FLAGS_OPEN;
|
rtems_libio_iop_flags_clear( iop, LIBIO_FLAGS_OPEN );
|
||||||
|
|
||||||
rc = (*iop->pathinfo.handlers->close_h)( iop );
|
rc = (*iop->pathinfo.handlers->close_h)( iop );
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ static int duplicate_iop( rtems_libio_t *iop )
|
|||||||
if (diop != NULL) {
|
if (diop != NULL) {
|
||||||
int oflag = rtems_libio_to_fcntl_flags( iop->flags );
|
int oflag = rtems_libio_to_fcntl_flags( iop->flags );
|
||||||
|
|
||||||
diop->flags |= rtems_libio_fcntl_flags( oflag );
|
rtems_libio_iop_flags_set( diop, rtems_libio_fcntl_flags( oflag ) );
|
||||||
|
|
||||||
rtems_filesystem_instance_lock( &iop->pathinfo );
|
rtems_filesystem_instance_lock( &iop->pathinfo );
|
||||||
rtems_filesystem_location_clone( &diop->pathinfo, &iop->pathinfo );
|
rtems_filesystem_location_clone( &diop->pathinfo, &iop->pathinfo );
|
||||||
@@ -75,7 +75,7 @@ static int duplicate2_iop( rtems_libio_t *iop, int fd2 )
|
|||||||
|
|
||||||
if (rv == 0) {
|
if (rv == 0) {
|
||||||
oflag = rtems_libio_to_fcntl_flags( iop->flags );
|
oflag = rtems_libio_to_fcntl_flags( iop->flags );
|
||||||
iop2->flags |= rtems_libio_fcntl_flags( oflag );
|
rtems_libio_iop_flags_set( iop2, rtems_libio_fcntl_flags( oflag ) );
|
||||||
|
|
||||||
rtems_filesystem_instance_lock( &iop->pathinfo );
|
rtems_filesystem_instance_lock( &iop->pathinfo );
|
||||||
rtems_filesystem_location_clone( &iop2->pathinfo, &iop->pathinfo );
|
rtems_filesystem_location_clone( &iop2->pathinfo, &iop->pathinfo );
|
||||||
@@ -145,9 +145,9 @@ static int vfcntl(
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if ( va_arg( ap, int ) )
|
if ( va_arg( ap, int ) )
|
||||||
iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC;
|
rtems_libio_iop_flags_set( iop, LIBIO_FLAGS_CLOSE_ON_EXEC );
|
||||||
else
|
else
|
||||||
iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC;
|
rtems_libio_iop_flags_clear( iop, LIBIO_FLAGS_CLOSE_ON_EXEC );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F_GETFL: /* more flags (cloexec) */
|
case F_GETFL: /* more flags (cloexec) */
|
||||||
@@ -162,7 +162,8 @@ static int vfcntl(
|
|||||||
* XXX If we are turning on append, should we seek to the end?
|
* XXX If we are turning on append, should we seek to the end?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
iop->flags = (iop->flags & ~mask) | (flags & mask);
|
rtems_libio_iop_flags_clear( iop, mask );
|
||||||
|
rtems_libio_iop_flags_set( iop, flags & mask );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F_GETLK:
|
case F_GETLK:
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ static int do_open(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
iop->flags |= rtems_libio_fcntl_flags( oflag );
|
rtems_libio_iop_flags_set( iop, rtems_libio_fcntl_flags( oflag ) );
|
||||||
rtems_filesystem_eval_path_extract_currentloc( &ctx, &iop->pathinfo );
|
rtems_filesystem_eval_path_extract_currentloc( &ctx, &iop->pathinfo );
|
||||||
rtems_filesystem_eval_path_cleanup( &ctx );
|
rtems_filesystem_eval_path_cleanup( &ctx );
|
||||||
|
|
||||||
|
|||||||
@@ -102,9 +102,9 @@ static int IMFS_fifo_ioctl(
|
|||||||
err = -EFAULT;
|
err = -EFAULT;
|
||||||
else {
|
else {
|
||||||
if (*(int *)buffer)
|
if (*(int *)buffer)
|
||||||
iop->flags |= LIBIO_FLAGS_NO_DELAY;
|
rtems_libio_iop_flags_set( iop, LIBIO_FLAGS_NO_DELAY );
|
||||||
else
|
else
|
||||||
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
|
rtems_libio_iop_flags_clear( iop, LIBIO_FLAGS_NO_DELAY );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ void pipe_release(
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* This is safe for IMFS, but how about other FSes? */
|
/* This is safe for IMFS, but how about other FSes? */
|
||||||
iop->flags &= ~LIBIO_FLAGS_OPEN;
|
rtems_libio_iop_flags_clear( iop, LIBIO_FLAGS_OPEN );
|
||||||
if(iop->pathinfo.ops->unlink_h(&iop->pathinfo))
|
if(iop->pathinfo.ops->unlink_h(&iop->pathinfo))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ int pipe_create(
|
|||||||
else {
|
else {
|
||||||
/* Reset open file to blocking mode */
|
/* Reset open file to blocking mode */
|
||||||
iop = rtems_libio_iop(filsdes[0]);
|
iop = rtems_libio_iop(filsdes[0]);
|
||||||
iop->flags &= ~LIBIO_FLAGS_NO_DELAY;
|
rtems_libio_iop_flags_clear( iop, LIBIO_FLAGS_NO_DELAY );
|
||||||
|
|
||||||
filsdes[1] = open(fifopath, O_WRONLY);
|
filsdes[1] = open(fifopath, O_WRONLY);
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ rtems_bsdnet_makeFdForSocket (void *so)
|
|||||||
rtems_set_errno_and_return_minus_one( ENFILE );
|
rtems_set_errno_and_return_minus_one( ENFILE );
|
||||||
|
|
||||||
fd = rtems_libio_iop_to_descriptor(iop);
|
fd = rtems_libio_iop_to_descriptor(iop);
|
||||||
iop->flags |= LIBIO_FLAGS_WRITE | LIBIO_FLAGS_READ;
|
rtems_libio_iop_flags_set(iop, LIBIO_FLAGS_READ_WRITE);
|
||||||
iop->data0 = fd;
|
iop->data0 = fd;
|
||||||
iop->data1 = so;
|
iop->data1 = so;
|
||||||
iop->pathinfo.handlers = &socket_handlers;
|
iop->pathinfo.handlers = &socket_handlers;
|
||||||
|
|||||||
@@ -275,11 +275,11 @@ int shm_open( const char *name, int oflag, mode_t mode )
|
|||||||
}
|
}
|
||||||
|
|
||||||
fd = rtems_libio_iop_to_descriptor( iop );
|
fd = rtems_libio_iop_to_descriptor( iop );
|
||||||
iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC;
|
rtems_libio_iop_flags_set( iop, LIBIO_FLAGS_CLOSE_ON_EXEC );
|
||||||
if ( oflag & O_RDONLY ) {
|
if ( oflag & O_RDONLY ) {
|
||||||
iop->flags |= LIBIO_FLAGS_READ;
|
rtems_libio_iop_flags_set( iop, LIBIO_FLAGS_READ );
|
||||||
} else {
|
} else {
|
||||||
iop->flags |= LIBIO_FLAGS_READ_WRITE;
|
rtems_libio_iop_flags_set( iop, LIBIO_FLAGS_READ_WRITE );
|
||||||
}
|
}
|
||||||
iop->data0 = fd;
|
iop->data0 = fd;
|
||||||
iop->data1 = shm;
|
iop->data1 = shm;
|
||||||
|
|||||||
Reference in New Issue
Block a user