Changeset af020036 in rtems for cpukit/libcsupport/src/fcntl.c


Ignore:
Timestamp:
Mar 19, 1999, 9:51:58 PM (21 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
9ec96478
Parents:
b64b1ed
Message:

Patch from Eric Norum <eric@…> that adds external
fcntl support and an external fcntl handler for sockets.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libcsupport/src/fcntl.c

    rb64b1ed raf020036  
    3131  int            fd2;
    3232  int            flags;
     33  int            ret = 0;
    3334 
    3435  va_start( ap, cmd );
     
    5455        /* allocate a file control block */
    5556        diop = rtems_libio_allocate();
    56         if ( diop == 0 )
    57           return -1;
     57        if ( diop == 0 ) {
     58          ret = -1;
     59          break;
     60        }
    5861      }
    5962
     
    6366      diop->pathinfo   = iop->pathinfo;
    6467     
    65       return 0;
     68      break;
    6669
    6770    case F_GETFD:        /* get f_flags */
    68       if ( iop->flags & LIBIO_FLAGS_CLOSE_ON_EXEC )
    69         return 1;
    70       return 0;
     71      ret = ((iop->flags & LIBIO_FLAGS_CLOSE_ON_EXEC) != 0);
     72      break;
    7173
    7274    case F_SETFD:        /* set f_flags */
     
    8385      else
    8486        iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC;
    85       return 0;
     87      break;
    8688
    8789    case F_GETFL:        /* more flags (cloexec) */
    88       return rtems_libio_to_fcntl_flags( iop->flags );
     90      ret = rtems_libio_to_fcntl_flags( iop->flags );
    8991
    9092    case F_SETFL:
     
    9294
    9395      /*
    94        *  XXX Double check this in the POSIX spec.  According to the Linux
    95        *  XXX man page, only these flags can be added.
    96        */
    97 
    98       flags = (iop->flags & ~(O_APPEND|O_NONBLOCK)) |
    99                    (flags & (O_APPEND|O_NONBLOCK));
    100 
    101       /*
    10296       *  XXX If we are turning on append, should we seek to the end?
    10397       */
    10498
    105       iop->flags = flags;
    106       return 0;
     99      iop->flags = (iop->flags & ~(O_APPEND | O_NONBLOCK)) |
     100                   (flags & (O_APPEND | O_NONBLOCK));
     101      break;
    107102
    108103    case F_GETLK:
    109       return -1;
     104      errno = ENOTSUP;
     105      ret = -1;
     106      break;
    110107
    111108    case F_SETLK:
    112       return -1;
     109      errno = ENOTSUP;
     110      ret = -1;
     111      break;
    113112
    114113    case F_SETLKW:
    115       return -1;
     114      errno = ENOTSUP;
     115      ret = -1;
     116      break;
    116117
    117118    case F_SETOWN:       /*  for sockets. */
    118       return -1;
     119      errno = ENOTSUP;
     120      ret = -1;
     121      break;
    119122
    120123    case F_GETOWN:       /*  for sockets. */
    121       return -1;
     124      errno = ENOTSUP;
     125      ret = -1;
     126      break;
    122127
    123128    default:
    124129      break;
    125130  }
    126   return -1;
     131  if ((ret >= 0) && iop->handlers->fcntl) {
     132    int err = (*iop->handlers->fcntl)( cmd, iop );
     133    if (err) {
     134      errno = err;
     135      ret = -1;
     136    }
     137  }
     138  return ret;
    127139}
Note: See TracChangeset for help on using the changeset viewer.