Changeset af020036 in rtems
- Timestamp:
- 03/19/99 21:51:58 (24 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 9ec96478
- Parents:
- b64b1ed
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/exec/libcsupport/include/rtems/libio.h
rb64b1ed raf020036 116 116 ); 117 117 118 typedef int (*rtems_filesystem_fcntl_t)( 119 int cmd, 120 rtems_libio_t *iop 121 ); 122 118 123 typedef struct { 119 124 rtems_filesystem_open_t open; … … 129 134 rtems_filesystem_fsync_t fsync; 130 135 rtems_filesystem_fdatasync_t fdatasync; 136 rtems_filesystem_fcntl_t fcntl; 131 137 } rtems_filesystem_file_handlers_r; 132 138 -
c/src/exec/libcsupport/src/fcntl.c
rb64b1ed raf020036 31 31 int fd2; 32 32 int flags; 33 int ret = 0; 33 34 34 35 va_start( ap, cmd ); … … 54 55 /* allocate a file control block */ 55 56 diop = rtems_libio_allocate(); 56 if ( diop == 0 ) 57 return -1; 57 if ( diop == 0 ) { 58 ret = -1; 59 break; 60 } 58 61 } 59 62 … … 63 66 diop->pathinfo = iop->pathinfo; 64 67 65 return 0;68 break; 66 69 67 70 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; 71 73 72 74 case F_SETFD: /* set f_flags */ … … 83 85 else 84 86 iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC; 85 return 0;87 break; 86 88 87 89 case F_GETFL: /* more flags (cloexec) */ 88 ret urnrtems_libio_to_fcntl_flags( iop->flags );90 ret = rtems_libio_to_fcntl_flags( iop->flags ); 89 91 90 92 case F_SETFL: … … 92 94 93 95 /* 94 * XXX Double check this in the POSIX spec. According to the Linux95 * 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 /*102 96 * XXX If we are turning on append, should we seek to the end? 103 97 */ 104 98 105 iop->flags = flags; 106 return 0; 99 iop->flags = (iop->flags & ~(O_APPEND | O_NONBLOCK)) | 100 (flags & (O_APPEND | O_NONBLOCK)); 101 break; 107 102 108 103 case F_GETLK: 109 return -1; 104 errno = ENOTSUP; 105 ret = -1; 106 break; 110 107 111 108 case F_SETLK: 112 return -1; 109 errno = ENOTSUP; 110 ret = -1; 111 break; 113 112 114 113 case F_SETLKW: 115 return -1; 114 errno = ENOTSUP; 115 ret = -1; 116 break; 116 117 117 118 case F_SETOWN: /* for sockets. */ 118 return -1; 119 errno = ENOTSUP; 120 ret = -1; 121 break; 119 122 120 123 case F_GETOWN: /* for sockets. */ 121 return -1; 124 errno = ENOTSUP; 125 ret = -1; 126 break; 122 127 123 128 default: 124 129 break; 125 130 } 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; 127 139 } -
c/src/exec/libnetworking/rtems/rtems_syscall.c
rb64b1ed raf020036 21 21 #include <sys/protosw.h> 22 22 #include <sys/proc.h> 23 #include <sys/fcntl.h> 23 24 #include <sys/filio.h> 24 25 … … 645 646 646 647 static int 647 so_ioctl ( struct socket *so, unsigned32 command, void *buffer)648 so_ioctl (rtems_libio_t *iop, struct socket *so, unsigned32 command, void *buffer) 648 649 { 649 650 switch (command) { 650 651 case FIONBIO: 651 if (*(int *)buffer) 652 if (*(int *)buffer) { 653 iop->flags |= O_NONBLOCK; 652 654 so->so_state |= SS_NBIO; 653 else 655 } 656 else { 657 iop->flags &= ~O_NONBLOCK; 654 658 so->so_state &= ~SS_NBIO; 659 } 655 660 return 0; 656 661 … … 679 684 return -1; 680 685 } 681 error = so_ioctl ( so, command, buffer);686 error = so_ioctl (iop, so, command, buffer); 682 687 rtems_bsdnet_semaphore_release (); 683 688 if (error) { … … 686 691 } 687 692 return 0; 693 } 694 695 static int 696 rtems_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; 688 713 } 689 714 … … 708 733 NULL, /* fsync */ 709 734 NULL, /* fdatasync */ 735 rtems_bsdnet_fcntl, /* fcntl */ 710 736 }; -
c/src/lib/include/rtems/libio.h
rb64b1ed raf020036 116 116 ); 117 117 118 typedef int (*rtems_filesystem_fcntl_t)( 119 int cmd, 120 rtems_libio_t *iop 121 ); 122 118 123 typedef struct { 119 124 rtems_filesystem_open_t open; … … 129 134 rtems_filesystem_fsync_t fsync; 130 135 rtems_filesystem_fdatasync_t fdatasync; 136 rtems_filesystem_fcntl_t fcntl; 131 137 } rtems_filesystem_file_handlers_r; 132 138 -
c/src/lib/libc/fcntl.c
rb64b1ed raf020036 31 31 int fd2; 32 32 int flags; 33 int ret = 0; 33 34 34 35 va_start( ap, cmd ); … … 54 55 /* allocate a file control block */ 55 56 diop = rtems_libio_allocate(); 56 if ( diop == 0 ) 57 return -1; 57 if ( diop == 0 ) { 58 ret = -1; 59 break; 60 } 58 61 } 59 62 … … 63 66 diop->pathinfo = iop->pathinfo; 64 67 65 return 0;68 break; 66 69 67 70 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; 71 73 72 74 case F_SETFD: /* set f_flags */ … … 83 85 else 84 86 iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC; 85 return 0;87 break; 86 88 87 89 case F_GETFL: /* more flags (cloexec) */ 88 ret urnrtems_libio_to_fcntl_flags( iop->flags );90 ret = rtems_libio_to_fcntl_flags( iop->flags ); 89 91 90 92 case F_SETFL: … … 92 94 93 95 /* 94 * XXX Double check this in the POSIX spec. According to the Linux95 * 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 /*102 96 * XXX If we are turning on append, should we seek to the end? 103 97 */ 104 98 105 iop->flags = flags; 106 return 0; 99 iop->flags = (iop->flags & ~(O_APPEND | O_NONBLOCK)) | 100 (flags & (O_APPEND | O_NONBLOCK)); 101 break; 107 102 108 103 case F_GETLK: 109 return -1; 104 errno = ENOTSUP; 105 ret = -1; 106 break; 110 107 111 108 case F_SETLK: 112 return -1; 109 errno = ENOTSUP; 110 ret = -1; 111 break; 113 112 114 113 case F_SETLKW: 115 return -1; 114 errno = ENOTSUP; 115 ret = -1; 116 break; 116 117 117 118 case F_SETOWN: /* for sockets. */ 118 return -1; 119 errno = ENOTSUP; 120 ret = -1; 121 break; 119 122 120 123 case F_GETOWN: /* for sockets. */ 121 return -1; 124 errno = ENOTSUP; 125 ret = -1; 126 break; 122 127 123 128 default: 124 129 break; 125 130 } 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; 127 139 } -
c/src/lib/libc/libio.h
rb64b1ed raf020036 116 116 ); 117 117 118 typedef int (*rtems_filesystem_fcntl_t)( 119 int cmd, 120 rtems_libio_t *iop 121 ); 122 118 123 typedef struct { 119 124 rtems_filesystem_open_t open; … … 129 134 rtems_filesystem_fsync_t fsync; 130 135 rtems_filesystem_fdatasync_t fdatasync; 136 rtems_filesystem_fcntl_t fcntl; 131 137 } rtems_filesystem_file_handlers_r; 132 138 -
c/src/lib/libnetworking/rtems/rtems_syscall.c
rb64b1ed raf020036 21 21 #include <sys/protosw.h> 22 22 #include <sys/proc.h> 23 #include <sys/fcntl.h> 23 24 #include <sys/filio.h> 24 25 … … 645 646 646 647 static int 647 so_ioctl ( struct socket *so, unsigned32 command, void *buffer)648 so_ioctl (rtems_libio_t *iop, struct socket *so, unsigned32 command, void *buffer) 648 649 { 649 650 switch (command) { 650 651 case FIONBIO: 651 if (*(int *)buffer) 652 if (*(int *)buffer) { 653 iop->flags |= O_NONBLOCK; 652 654 so->so_state |= SS_NBIO; 653 else 655 } 656 else { 657 iop->flags &= ~O_NONBLOCK; 654 658 so->so_state &= ~SS_NBIO; 659 } 655 660 return 0; 656 661 … … 679 684 return -1; 680 685 } 681 error = so_ioctl ( so, command, buffer);686 error = so_ioctl (iop, so, command, buffer); 682 687 rtems_bsdnet_semaphore_release (); 683 688 if (error) { … … 686 691 } 687 692 return 0; 693 } 694 695 static int 696 rtems_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; 688 713 } 689 714 … … 708 733 NULL, /* fsync */ 709 734 NULL, /* fdatasync */ 735 rtems_bsdnet_fcntl, /* fcntl */ 710 736 }; -
c/src/libnetworking/rtems/rtems_syscall.c
rb64b1ed raf020036 21 21 #include <sys/protosw.h> 22 22 #include <sys/proc.h> 23 #include <sys/fcntl.h> 23 24 #include <sys/filio.h> 24 25 … … 645 646 646 647 static int 647 so_ioctl ( struct socket *so, unsigned32 command, void *buffer)648 so_ioctl (rtems_libio_t *iop, struct socket *so, unsigned32 command, void *buffer) 648 649 { 649 650 switch (command) { 650 651 case FIONBIO: 651 if (*(int *)buffer) 652 if (*(int *)buffer) { 653 iop->flags |= O_NONBLOCK; 652 654 so->so_state |= SS_NBIO; 653 else 655 } 656 else { 657 iop->flags &= ~O_NONBLOCK; 654 658 so->so_state &= ~SS_NBIO; 659 } 655 660 return 0; 656 661 … … 679 684 return -1; 680 685 } 681 error = so_ioctl ( so, command, buffer);686 error = so_ioctl (iop, so, command, buffer); 682 687 rtems_bsdnet_semaphore_release (); 683 688 if (error) { … … 686 691 } 687 692 return 0; 693 } 694 695 static int 696 rtems_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; 688 713 } 689 714 … … 708 733 NULL, /* fsync */ 709 734 NULL, /* fdatasync */ 735 rtems_bsdnet_fcntl, /* fcntl */ 710 736 }; -
cpukit/libcsupport/include/rtems/libio.h
rb64b1ed raf020036 116 116 ); 117 117 118 typedef int (*rtems_filesystem_fcntl_t)( 119 int cmd, 120 rtems_libio_t *iop 121 ); 122 118 123 typedef struct { 119 124 rtems_filesystem_open_t open; … … 129 134 rtems_filesystem_fsync_t fsync; 130 135 rtems_filesystem_fdatasync_t fdatasync; 136 rtems_filesystem_fcntl_t fcntl; 131 137 } rtems_filesystem_file_handlers_r; 132 138 -
cpukit/libcsupport/src/fcntl.c
rb64b1ed raf020036 31 31 int fd2; 32 32 int flags; 33 int ret = 0; 33 34 34 35 va_start( ap, cmd ); … … 54 55 /* allocate a file control block */ 55 56 diop = rtems_libio_allocate(); 56 if ( diop == 0 ) 57 return -1; 57 if ( diop == 0 ) { 58 ret = -1; 59 break; 60 } 58 61 } 59 62 … … 63 66 diop->pathinfo = iop->pathinfo; 64 67 65 return 0;68 break; 66 69 67 70 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; 71 73 72 74 case F_SETFD: /* set f_flags */ … … 83 85 else 84 86 iop->flags &= ~LIBIO_FLAGS_CLOSE_ON_EXEC; 85 return 0;87 break; 86 88 87 89 case F_GETFL: /* more flags (cloexec) */ 88 ret urnrtems_libio_to_fcntl_flags( iop->flags );90 ret = rtems_libio_to_fcntl_flags( iop->flags ); 89 91 90 92 case F_SETFL: … … 92 94 93 95 /* 94 * XXX Double check this in the POSIX spec. According to the Linux95 * 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 /*102 96 * XXX If we are turning on append, should we seek to the end? 103 97 */ 104 98 105 iop->flags = flags; 106 return 0; 99 iop->flags = (iop->flags & ~(O_APPEND | O_NONBLOCK)) | 100 (flags & (O_APPEND | O_NONBLOCK)); 101 break; 107 102 108 103 case F_GETLK: 109 return -1; 104 errno = ENOTSUP; 105 ret = -1; 106 break; 110 107 111 108 case F_SETLK: 112 return -1; 109 errno = ENOTSUP; 110 ret = -1; 111 break; 113 112 114 113 case F_SETLKW: 115 return -1; 114 errno = ENOTSUP; 115 ret = -1; 116 break; 116 117 117 118 case F_SETOWN: /* for sockets. */ 118 return -1; 119 errno = ENOTSUP; 120 ret = -1; 121 break; 119 122 120 123 case F_GETOWN: /* for sockets. */ 121 return -1; 124 errno = ENOTSUP; 125 ret = -1; 126 break; 122 127 123 128 default: 124 129 break; 125 130 } 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; 127 139 } -
cpukit/libnetworking/rtems/rtems_syscall.c
rb64b1ed raf020036 21 21 #include <sys/protosw.h> 22 22 #include <sys/proc.h> 23 #include <sys/fcntl.h> 23 24 #include <sys/filio.h> 24 25 … … 645 646 646 647 static int 647 so_ioctl ( struct socket *so, unsigned32 command, void *buffer)648 so_ioctl (rtems_libio_t *iop, struct socket *so, unsigned32 command, void *buffer) 648 649 { 649 650 switch (command) { 650 651 case FIONBIO: 651 if (*(int *)buffer) 652 if (*(int *)buffer) { 653 iop->flags |= O_NONBLOCK; 652 654 so->so_state |= SS_NBIO; 653 else 655 } 656 else { 657 iop->flags &= ~O_NONBLOCK; 654 658 so->so_state &= ~SS_NBIO; 659 } 655 660 return 0; 656 661 … … 679 684 return -1; 680 685 } 681 error = so_ioctl ( so, command, buffer);686 error = so_ioctl (iop, so, command, buffer); 682 687 rtems_bsdnet_semaphore_release (); 683 688 if (error) { … … 686 691 } 687 692 return 0; 693 } 694 695 static int 696 rtems_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; 688 713 } 689 714 … … 708 733 NULL, /* fsync */ 709 734 NULL, /* fdatasync */ 735 rtems_bsdnet_fcntl, /* fcntl */ 710 736 };
Note: See TracChangeset
for help on using the changeset viewer.