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
  • c/src/exec/libnetworking/rtems/rtems_syscall.c

    rb64b1ed raf020036  
    2121#include <sys/protosw.h>
    2222#include <sys/proc.h>
     23#include <sys/fcntl.h>
    2324#include <sys/filio.h>
    2425
     
    645646
    646647static int
    647 so_ioctl (struct socket *so, unsigned32 command, void *buffer)
     648so_ioctl (rtems_libio_t *iop, struct socket *so, unsigned32 command, void *buffer)
    648649{
    649650        switch (command) {
    650651        case FIONBIO:
    651                 if (*(int *)buffer)
     652                if (*(int *)buffer) {
     653                        iop->flags |= O_NONBLOCK;
    652654                        so->so_state |= SS_NBIO;
    653                 else
     655                }
     656                else {
     657                        iop->flags &= ~O_NONBLOCK;
    654658                        so->so_state &= ~SS_NBIO;
     659                }
    655660                return 0;
    656661
     
    679684                return -1;
    680685        }
    681         error = so_ioctl (so, command, buffer);
     686        error = so_ioctl (iop, so, command, buffer);
    682687        rtems_bsdnet_semaphore_release ();
    683688        if (error) {
     
    686691        }
    687692        return 0;
     693}
     694
     695static int
     696rtems_bsdnet_fcntl (int cmd, rtems_libio_t *iop)
     697{
     698        struct socket *so;
     699
     700        if (cmd == F_SETFL) {
     701                rtems_bsdnet_semaphore_obtain ();
     702                if ((so = iop->data1) == NULL) {
     703                        rtems_bsdnet_semaphore_release ();
     704                        return EBADF;
     705                }
     706                if (iop->flags & O_NONBLOCK)
     707                        so->so_state |= SS_NBIO;
     708                else
     709                        so->so_state &= ~SS_NBIO;
     710                rtems_bsdnet_semaphore_release ();
     711        }
     712        return 0;
    688713}
    689714
     
    708733        NULL,                   /* fsync */
    709734        NULL,                   /* fdatasync */
     735        rtems_bsdnet_fcntl,     /* fcntl */
    710736};
Note: See TracChangeset for help on using the changeset viewer.