diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-03-26 22:31:31 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-03-26 22:31:31 +0000 |
commit | 55568af2e70d7026b57fe54ce14f6980a37c4e08 (patch) | |
tree | 9ecac1722450cf6b582450bd90e15e878d290fe5 /cpukit/libcsupport/src/libio_init.c | |
parent | 2007-03-26 Chris Johns <chrisj@rtems.org> (diff) | |
download | rtems-55568af2e70d7026b57fe54ce14f6980a37c4e08.tar.bz2 |
2007-03-26 Joel Sherrill <joel@OARcorp.com>
* libcsupport/src/assoc.c, libcsupport/src/libio.c,
libcsupport/src/write.c: Split files to shrink minimum.exe. Hopefully
this will not be deemed necessary to commit to the 4.7 branch.
* libcsupport/src/assoclocalbyname.c,
libcsupport/src/assoclocalbyremote.c,
libcsupport/src/assoclocalbyremotebitfield.c,
libcsupport/src/assocnamebylocal.c,
libcsupport/src/assocnamebylocalbitfield.c,
libcsupport/src/assocnamebyremote.c,
libcsupport/src/assocnamebyremotebitfield.c,
libcsupport/src/assocptrbylocal.c, libcsupport/src/assocptrbyname.c,
libcsupport/src/assocptrbyremote.c,
libcsupport/src/assocremotebylocal.c,
libcsupport/src/assocremotebylocalbitfield.c,
libcsupport/src/assocremotebyname.c, libcsupport/src/libio_init.c,
libcsupport/src/write_r.c: New files.
Diffstat (limited to 'cpukit/libcsupport/src/libio_init.c')
-rw-r--r-- | cpukit/libcsupport/src/libio_init.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/cpukit/libcsupport/src/libio_init.c b/cpukit/libcsupport/src/libio_init.c new file mode 100644 index 0000000000..4968058637 --- /dev/null +++ b/cpukit/libcsupport/src/libio_init.c @@ -0,0 +1,90 @@ +/* + * This file contains the support infrastructure used to manage the + * table of integer style file descriptors used by the low level + * POSIX system calls like open(), read, fstat(), etc. + * + * COPYRIGHT (c) 1989-1999. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/libio_.h> /* libio_.h pulls in rtems */ +#include <rtems.h> +#include <rtems/assoc.h> /* assoc.h not included by rtems.h */ + +#include <stdio.h> /* O_RDONLY, et.al. */ +#include <fcntl.h> /* O_RDONLY, et.al. */ +#include <assert.h> +#include <errno.h> + +#include <errno.h> +#include <string.h> /* strcmp */ +#include <unistd.h> +#include <stdlib.h> /* calloc() */ + +#include <rtems/libio.h> /* libio.h not pulled in by rtems */ + +/* + * File descriptor Table Information + */ + +extern uint32_t rtems_libio_number_iops; +rtems_id rtems_libio_semaphore; +rtems_libio_t *rtems_libio_iops; +rtems_libio_t *rtems_libio_iop_freelist; + +/* + * rtems_libio_init + * + * Called by BSP startup code to initialize the libio subsystem. + */ + +void rtems_libio_init( void ) +{ + rtems_status_code rc; + int i; + rtems_libio_t *iop; + + if (rtems_libio_number_iops > 0) + { + rtems_libio_iops = (rtems_libio_t *) calloc(rtems_libio_number_iops, + sizeof(rtems_libio_t)); + if (rtems_libio_iops == NULL) + rtems_fatal_error_occurred(RTEMS_NO_MEMORY); + + iop = rtems_libio_iop_freelist = rtems_libio_iops; + for (i = 0 ; i < (rtems_libio_number_iops - 1) ; i++, iop++) + iop->data1 = iop + 1; + iop->data1 = NULL; + } + + /* + * Create the binary semaphore used to provide mutual exclusion + * on the IOP Table. + */ + + rc = rtems_semaphore_create( + RTEMS_LIBIO_SEM, + 1, + RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY, + RTEMS_NO_PRIORITY, + &rtems_libio_semaphore + ); + if ( rc != RTEMS_SUCCESSFUL ) + rtems_fatal_error_occurred( rc ); + + /* + * Initialize the base file system infrastructure. + */ + + rtems_filesystem_initialize(); +} |