source:
rtems/cpukit/libcsupport/src/libio_sockets.c
@
a29d2e7
Last change on this file since a29d2e7 was 83c5fc1, checked in by Ralf Corsepius <ralf.corsepius@…>, on 03/23/04 at 06:07:53 | |
---|---|
|
|
File size: 1.5 KB |
Line | |
---|---|
1 | /* |
2 | * This file contains the support infrastructure used to manage the |
3 | * table of integer style file descriptors used by the socket calls. |
4 | * |
5 | * COPYRIGHT (c) 1989-1999. |
6 | * On-Line Applications Research Corporation (OAR). |
7 | * |
8 | * The license and distribution terms for this file may be |
9 | * found in the file LICENSE in this distribution or at |
10 | * http://www.rtems.com/license/LICENSE. |
11 | * |
12 | * $Id$ |
13 | */ |
14 | |
15 | #if HAVE_CONFIG_H |
16 | #include "config.h" |
17 | #endif |
18 | |
19 | #include <rtems/libio_.h> /* libio_.h pulls in rtems */ |
20 | #include <rtems.h> |
21 | |
22 | #include <errno.h> |
23 | |
24 | /* |
25 | * Convert an RTEMS file descriptor to a BSD socket pointer. |
26 | */ |
27 | |
28 | struct socket *rtems_bsdnet_fdToSocket( |
29 | int fd |
30 | ) |
31 | { |
32 | rtems_libio_t *iop; |
33 | |
34 | /* same as rtems_libio_check_fd(_fd) but different return */ |
35 | if ((uint32_t )fd >= rtems_libio_number_iops) { |
36 | errno = EBADF; |
37 | return NULL; |
38 | } |
39 | iop = &rtems_libio_iops[fd]; |
40 | |
41 | /* same as rtems_libio_check_is_open(iop) but different return */ |
42 | if ((iop->flags & LIBIO_FLAGS_OPEN) == 0) { |
43 | errno = EBADF; |
44 | return NULL; |
45 | } |
46 | |
47 | if (iop->data1 == NULL) |
48 | errno = EBADF; |
49 | return iop->data1; |
50 | } |
51 | |
52 | /* |
53 | * Create an RTEMS file descriptor for a socket |
54 | */ |
55 | |
56 | int rtems_bsdnet_makeFdForSocket( |
57 | void *so, |
58 | const rtems_filesystem_file_handlers_r *h |
59 | ) |
60 | { |
61 | rtems_libio_t *iop; |
62 | int fd; |
63 | |
64 | iop = rtems_libio_allocate(); |
65 | if (iop == 0) { |
66 | errno = ENFILE; |
67 | return -1; |
68 | } |
69 | fd = iop - rtems_libio_iops; |
70 | iop->flags |= LIBIO_FLAGS_WRITE | LIBIO_FLAGS_READ; |
71 | iop->data0 = fd; |
72 | iop->data1 = so; |
73 | iop->handlers = (rtems_filesystem_file_handlers_r *) h; |
74 | return fd; |
75 | } |
Note: See TracBrowser
for help on using the repository browser.