Changeset 9012db8 in rtems


Ignore:
Timestamp:
Sep 13, 2017, 9:33:25 AM (23 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
98041b68
Parents:
d4c5441
git-author:
Sebastian Huber <sebastian.huber@…> (09/13/17 09:33:25)
git-committer:
Sebastian Huber <sebastian.huber@…> (09/15/17 08:27:13)
Message:

libio: LIBIO_GET_IOP() LIBIO_GET_IOP_WITH_ACCESS()

Replace rtems_libio_check_fd(), rtems_libio_iop(),
rtems_libio_check_open() and rtems_libio_check_permissions()
combinations with new LIBIO_GET_IOP() and LIBIO_GET_IOP_WITH_ACCESS()
macros.

Update #3132.

Location:
cpukit
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libcsupport/include/rtems/libio_.h

    rd4c5441 r9012db8  
    156156 *
    157157 * @return The iop corresponding to the specified file descriptor.
    158  *
    159  * @see rtems_libio_check_fd().
    160158 */
    161159static inline rtems_libio_t *rtems_libio_iop( int fd )
     
    188186  } while (0)
    189187
    190 /*
    191  *  rtems_libio_check_fd
    192  *
    193  *  Macro to check if a file descriptor number is valid.
    194  */
    195 
    196 #define rtems_libio_check_fd(_fd) \
    197   do {                                                     \
    198       if ((uint32_t) (_fd) >= rtems_libio_number_iops) {   \
    199           errno = EBADF;                                   \
    200           return -1;                                       \
    201       }                                                    \
    202   } while (0)
     188/**
     189 * @brief Macro to get the iop for the specified file descriptor.
     190 *
     191 * Checks that the file descriptor is in the valid range and open.
     192 */
     193#define LIBIO_GET_IOP( _fd, _iop ) \
     194  do { \
     195    uint32_t _flags; \
     196    if ( (uint32_t) ( _fd ) >= rtems_libio_number_iops ) { \
     197      rtems_set_errno_and_return_minus_one( EBADF ); \
     198    } \
     199    _iop = rtems_libio_iop( _fd ); \
     200    _flags = _iop->flags; \
     201    if ( ( _flags & LIBIO_FLAGS_OPEN ) == 0 ) { \
     202      rtems_set_errno_and_return_minus_one( EBADF ); \
     203    } \
     204  } while ( 0 )
     205
     206/**
     207 * @brief Macro to get the iop for the specified file descriptor with access
     208 * flags and error.
     209 *
     210 * Checks that the file descriptor is in the valid range and open.
     211 */
     212#define LIBIO_GET_IOP_WITH_ACCESS( _fd, _iop, _access_flags, _access_error ) \
     213  do { \
     214    uint32_t _flags; \
     215    uint32_t _mandatory; \
     216    if ( (uint32_t) ( _fd ) >= rtems_libio_number_iops ) { \
     217      rtems_set_errno_and_return_minus_one( EBADF ); \
     218    } \
     219    _iop = rtems_libio_iop( _fd ); \
     220    _flags = _iop->flags; \
     221    _mandatory = LIBIO_FLAGS_OPEN | ( _access_flags ); \
     222    if ( ( _flags & _mandatory ) != _mandatory ) { \
     223      int _error; \
     224      if ( ( _flags & LIBIO_FLAGS_OPEN ) == 0 ) { \
     225        _error = EBADF; \
     226      } else { \
     227        _error = _access_error; \
     228      } \
     229      rtems_set_errno_and_return_minus_one( _error ); \
     230    } \
     231  } while ( 0 )
    203232
    204233/*
     
    227256          return 0;                     \
    228257      }                                 \
    229   } while (0)
    230 
    231 /*
    232  *  rtems_libio_check_permissions
    233  *
    234  *  Macro to check if a file descriptor is open for this operation.
    235  *  On failure, return the user specified error.
    236  */
    237 
    238 #define rtems_libio_check_permissions(_iop, _flag, _errno) \
    239   do {                                                      \
    240       if (((_iop)->flags & (_flag)) == 0) {                 \
    241             rtems_set_errno_and_return_minus_one( _errno ); \
    242             return -1;                                      \
    243       }                                                     \
    244258  } while (0)
    245259
     
    952966  }
    953967
    954   rtems_libio_check_fd( fd );
    955   iop = rtems_libio_iop( fd );
    956   rtems_libio_check_is_open( iop );
    957   rtems_libio_check_permissions( iop, flags, EBADF );
    958 
     968  LIBIO_GET_IOP_WITH_ACCESS( fd, iop, flags, EBADF );
    959969  *iopp = iop;
    960970
  • cpukit/libcsupport/src/close.c

    rd4c5441 r9012db8  
    2828  int                 rc;
    2929
    30   rtems_libio_check_fd(fd);
    31   iop = rtems_libio_iop(fd);
    32   rtems_libio_check_is_open(iop);
     30  LIBIO_GET_IOP( fd, iop );
    3331
    3432  rtems_libio_iop_flags_clear( iop, LIBIO_FLAGS_OPEN );
  • cpukit/libcsupport/src/fchdir.c

    rd4c5441 r9012db8  
    4040  st.st_gid = 0;
    4141
    42   rtems_libio_check_fd( fd );
    43   iop = rtems_libio_iop( fd );
    44   rtems_libio_check_is_open( iop );
     42  LIBIO_GET_IOP( fd, iop );
    4543
    4644  rtems_filesystem_instance_lock( &iop->pathinfo );
  • cpukit/libcsupport/src/fchmod.c

    rd4c5441 r9012db8  
    6868  rtems_libio_t *iop;
    6969
    70   rtems_libio_check_fd( fd );
    71   iop = rtems_libio_iop( fd );
    72   rtems_libio_check_is_open(iop);
     70  LIBIO_GET_IOP( fd, iop );
    7371
    7472  rtems_filesystem_instance_lock( &iop->pathinfo );
  • cpukit/libcsupport/src/fchown.c

    rd4c5441 r9012db8  
    6565  rtems_libio_t *iop;
    6666
    67   rtems_libio_check_fd( fd );
    68   iop = rtems_libio_iop( fd );
    69   rtems_libio_check_is_open(iop);
     67  LIBIO_GET_IOP( fd, iop );
    7068
    7169  rtems_filesystem_instance_lock( &iop->pathinfo );
  • cpukit/libcsupport/src/fcntl.c

    rd4c5441 r9012db8  
    6666  int            rv = 0;
    6767
    68   rtems_libio_check_fd( fd2 );
     68  if ( (uint32_t) fd2 >= rtems_libio_number_iops ) {
     69    rtems_set_errno_and_return_minus_one( EBADF );
     70  }
     71
    6972  iop2 = rtems_libio_iop( fd2 );
    7073
     
    113116  int            ret = 0;
    114117
    115   rtems_libio_check_fd( fd );
    116   iop = rtems_libio_iop( fd );
    117   rtems_libio_check_is_open(iop);
     118  LIBIO_GET_IOP( fd, iop );
    118119
    119120  /*
  • cpukit/libcsupport/src/fdatasync.c

    rd4c5441 r9012db8  
    3030  rtems_libio_t *iop;
    3131
    32   rtems_libio_check_fd( fd );
    33   iop = rtems_libio_iop( fd );
    34   rtems_libio_check_is_open(iop);
    35   rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE, EBADF );
     32  LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EBADF );
    3633
    3734  /*
  • cpukit/libcsupport/src/fpathconf.c

    rd4c5441 r9012db8  
    3737  const rtems_filesystem_limits_and_options_t *the_limits;
    3838
    39   rtems_libio_check_fd(fd);
    40   iop = rtems_libio_iop(fd);
    41   rtems_libio_check_is_open(iop);
     39  LIBIO_GET_IOP( fd, iop );
    4240
    4341  /*
  • cpukit/libcsupport/src/fstat.c

    rd4c5441 r9012db8  
    3737   *  Now process the stat() request.
    3838   */
    39   rtems_libio_check_fd( fd );
    40   iop = rtems_libio_iop( fd );
    41   rtems_libio_check_is_open(iop);
     39  LIBIO_GET_IOP( fd, iop );
    4240
    4341  /*
  • cpukit/libcsupport/src/fsync.c

    rd4c5441 r9012db8  
    3333  rtems_libio_t *iop;
    3434
    35   rtems_libio_check_fd( fd );
    36   iop = rtems_libio_iop( fd );
    37   rtems_libio_check_is_open(iop);
     35  LIBIO_GET_IOP( fd, iop );
    3836
    3937  /*
  • cpukit/libcsupport/src/ftruncate.c

    rd4c5441 r9012db8  
    3030    rtems_libio_t *iop;
    3131
    32     rtems_libio_check_fd( fd );
    33     iop = rtems_libio_iop( fd );
    34     rtems_libio_check_is_open( iop );
    35     rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE, EINVAL );
     32    LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EINVAL );
    3633
    3734    rv = (*iop->pathinfo.handlers->ftruncate_h)( iop, length );
  • cpukit/libcsupport/src/ioctl.c

    rd4c5441 r9012db8  
    4040  void              *buffer;
    4141
    42   rtems_libio_check_fd( fd );
    43   iop = rtems_libio_iop( fd );
    44   rtems_libio_check_is_open(iop);
     42  LIBIO_GET_IOP( fd, iop );
    4543
    4644  va_start(ap, command);
  • cpukit/libcsupport/src/lseek.c

    rd4c5441 r9012db8  
    2222  rtems_libio_t *iop;
    2323
    24   rtems_libio_check_fd( fd );
    25   iop = rtems_libio_iop( fd );
    26   rtems_libio_check_is_open(iop);
     24  LIBIO_GET_IOP( fd, iop );
    2725
    2826  return (*iop->pathinfo.handlers->lseek_h)( iop, offset, whence );
  • cpukit/libcsupport/src/read.c

    rd4c5441 r9012db8  
    3636  rtems_libio_check_count( count );
    3737
    38   rtems_libio_check_fd( fd );
    39   iop = rtems_libio_iop( fd );
    40   rtems_libio_check_is_open( iop );
    41   rtems_libio_check_permissions( iop, LIBIO_FLAGS_READ, EBADF );
     38  LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_READ, EBADF );
    4239
    4340  /*
  • cpukit/libcsupport/src/write.c

    rd4c5441 r9012db8  
    3939  rtems_libio_check_count( count );
    4040
    41   rtems_libio_check_fd( fd );
    42   iop = rtems_libio_iop( fd );
    43   rtems_libio_check_is_open( iop );
    44   rtems_libio_check_permissions( iop, LIBIO_FLAGS_WRITE, EBADF );
     41  LIBIO_GET_IOP_WITH_ACCESS( fd, iop, LIBIO_FLAGS_WRITE, EBADF );
    4542
    4643  /*
  • cpukit/libnetworking/rtems/rtems_syscall.c

    rd4c5441 r9012db8  
    4545  rtems_libio_t *iop;
    4646
    47   /* same as rtems_libio_check_fd(_fd) but different return */
    4847  if ((uint32_t)fd >= rtems_libio_number_iops) {
    4948    errno = EBADF;
    5049    return NULL;
    5150  }
     51
    5252  iop = rtems_libio_iop(fd);
    5353
    54   /* same as rtems_libio_check_is_open(iop) but different return */
    5554  if ((rtems_libio_iop_flags(iop) & LIBIO_FLAGS_OPEN) == 0) {
    5655    errno = EBADF;
Note: See TracChangeset for help on using the changeset viewer.