summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-09-13 10:11:46 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-09-15 07:48:03 +0200
commit856ede4f91a76a1a681ceac24ddb18d3a438dffb (patch)
tree969faa830fdcc9815a4335567e10b4f949e7e942 /cpukit/libcsupport
parentlibio: rtems_libio_check_permissions_with_error() (diff)
downloadrtems-856ede4f91a76a1a681ceac24ddb18d3a438dffb.tar.bz2
libio: Add iop set/clear flags
Update #3132.
Diffstat (limited to 'cpukit/libcsupport')
-rw-r--r--cpukit/libcsupport/include/rtems/libio_.h40
-rw-r--r--cpukit/libcsupport/src/close.c2
-rw-r--r--cpukit/libcsupport/src/fcntl.c11
-rw-r--r--cpukit/libcsupport/src/open.c2
4 files changed, 48 insertions, 7 deletions
diff --git a/cpukit/libcsupport/include/rtems/libio_.h b/cpukit/libcsupport/include/rtems/libio_.h
index ba6866e5a4..ed5cd27c31 100644
--- a/cpukit/libcsupport/include/rtems/libio_.h
+++ b/cpukit/libcsupport/include/rtems/libio_.h
@@ -90,6 +90,46 @@ extern rtems_filesystem_mount_table_entry_t rtems_filesystem_null_mt_entry;
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.
*
* The file descriptor must be a valid index into the iop table.
diff --git a/cpukit/libcsupport/src/close.c b/cpukit/libcsupport/src/close.c
index 139ffd266a..649107dff0 100644
--- a/cpukit/libcsupport/src/close.c
+++ b/cpukit/libcsupport/src/close.c
@@ -31,7 +31,7 @@ int close(
iop = rtems_libio_iop(fd);
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 );
diff --git a/cpukit/libcsupport/src/fcntl.c b/cpukit/libcsupport/src/fcntl.c
index e7a9868980..0fe734d61c 100644
--- a/cpukit/libcsupport/src/fcntl.c
+++ b/cpukit/libcsupport/src/fcntl.c
@@ -33,7 +33,7 @@ static int duplicate_iop( rtems_libio_t *iop )
if (diop != NULL) {
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_location_clone( &diop->pathinfo, &iop->pathinfo );
@@ -75,7 +75,7 @@ static int duplicate2_iop( rtems_libio_t *iop, int fd2 )
if (rv == 0) {
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_location_clone( &iop2->pathinfo, &iop->pathinfo );
@@ -145,9 +145,9 @@ static int vfcntl(
*/
if ( va_arg( ap, int ) )
- iop->flags |= LIBIO_FLAGS_CLOSE_ON_EXEC;
+ rtems_libio_iop_flags_set( iop, LIBIO_FLAGS_CLOSE_ON_EXEC );
else
- iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC;
+ rtems_libio_iop_flags_clear( iop, LIBIO_FLAGS_CLOSE_ON_EXEC );
break;
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?
*/
- iop->flags = (iop->flags & ~mask) | (flags & mask);
+ rtems_libio_iop_flags_clear( iop, mask );
+ rtems_libio_iop_flags_set( iop, flags & mask );
break;
case F_GETLK:
diff --git a/cpukit/libcsupport/src/open.c b/cpukit/libcsupport/src/open.c
index 62ce507284..2ee99f1f4c 100644
--- a/cpukit/libcsupport/src/open.c
+++ b/cpukit/libcsupport/src/open.c
@@ -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_cleanup( &ctx );