diff options
Diffstat (limited to 'cpukit/libcsupport/src/fcntl.c')
-rw-r--r-- | cpukit/libcsupport/src/fcntl.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/cpukit/libcsupport/src/fcntl.c b/cpukit/libcsupport/src/fcntl.c index 0fe734d61c..82052011ec 100644 --- a/cpukit/libcsupport/src/fcntl.c +++ b/cpukit/libcsupport/src/fcntl.c @@ -26,15 +26,14 @@ static int duplicate_iop( rtems_libio_t *iop ) { - int rv = 0; + int rv; + int oflag; + rtems_libio_t *diop; - rtems_libio_t *diop = rtems_libio_allocate(); + oflag = rtems_libio_to_fcntl_flags( iop->flags ); + diop = rtems_libio_allocate(); if (diop != NULL) { - int oflag = rtems_libio_to_fcntl_flags( iop->flags ); - - 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 ); rtems_filesystem_instance_unlock( &iop->pathinfo ); @@ -46,6 +45,10 @@ static int duplicate_iop( rtems_libio_t *iop ) */ rv = (*diop->pathinfo.handlers->open_h)( diop, NULL, oflag, 0 ); if ( rv == 0 ) { + rtems_libio_iop_flags_initialize( + diop, + rtems_libio_fcntl_flags( oflag ) + ); rv = rtems_libio_iop_to_descriptor( diop ); } else { rtems_libio_free( diop ); |