summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libc/libio_sockets.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-03-01 22:40:08 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-03-01 22:40:08 +0000
commit73f6236bc09b3cadf0aa030e16396154421f3e30 (patch)
tree30c344abe6e8091d860d583e0a1342af575ae791 /c/src/lib/libc/libio_sockets.c
parentPart of the automake VI patch from Ralf Corsepius <corsepiu@faw.uni-ulm.de>: (diff)
downloadrtems-73f6236bc09b3cadf0aa030e16396154421f3e30.tar.bz2
Patch from Eric Norum <eric@skatter.usask.ca> to eliminate external
IO handlers scheme that was implemented originally just to support sockets. The file system IO switch is more general and works fine.
Diffstat (limited to 'c/src/lib/libc/libio_sockets.c')
-rw-r--r--c/src/lib/libc/libio_sockets.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/c/src/lib/libc/libio_sockets.c b/c/src/lib/libc/libio_sockets.c
index cb1d5a7bdd..8d21120f3d 100644
--- a/c/src/lib/libc/libio_sockets.c
+++ b/c/src/lib/libc/libio_sockets.c
@@ -18,7 +18,6 @@
#include <errno.h>
-
/*
* Convert an RTEMS file descriptor to a BSD socket pointer.
*/
@@ -29,11 +28,13 @@ struct socket *rtems_bsdnet_fdToSocket(
{
rtems_libio_t *iop;
- if ((unsigned32)fd >= rtems_libio_number_iops)
- return NULL;
+ if ((unsigned32)fd >= rtems_libio_number_iops) {
+ errno = EBADF;
+ return NULL;
+ }
iop = &rtems_libio_iops[fd];
- if ((iop->flags & LIBIO_FLAGS_HANDLER_MASK) != LIBIO_FLAGS_HANDLER_SOCK)
- return NULL;
+ if (iop->data1 == NULL)
+ errno = EBADF;
return iop->data1;
}
@@ -42,17 +43,22 @@ struct socket *rtems_bsdnet_fdToSocket(
*/
int rtems_bsdnet_makeFdForSocket(
- void *so
+ void *so,
+ const rtems_filesystem_file_handlers_r *h
)
{
rtems_libio_t *iop;
+ int fd;
iop = rtems_libio_allocate();
if (iop == 0) {
errno = ENFILE;
return -1;
}
- iop->flags |= LIBIO_FLAGS_HANDLER_SOCK | LIBIO_FLAGS_WRITE | LIBIO_FLAGS_READ;
+ fd = iop - rtems_libio_iops;
+ iop->flags |= LIBIO_FLAGS_WRITE | LIBIO_FLAGS_READ;
+ iop->data0 = fd;
iop->data1 = so;
- return iop - rtems_libio_iops;
+ iop->handlers = h;
+ return fd;
}