mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-08-29 01:09:20 +08:00
* Makefile.am, preinstall.am, libcsupport/Makefile.am, libcsupport/include/rtems/libcsupport.h, libcsupport/include/rtems/libio.h, libcsupport/src/base_fs.c, libcsupport/src/libio_init.c, libcsupport/src/newlibc_exit.c, libcsupport/src/newlibc_init.c, libcsupport/src/sync.c, libfs/Makefile.am, libfs/src/imfs/deviceio.c, sapi/include/confdefs.h: Merge GSOC project code to add simple device only filesystem (devfs), optionally completely drop out filesystem, and to clean up disabling newlib reentrancy support. This dropped 17K from the minimum.exe for sparc/sis and arm/rtl22xx_t now has a 15K code space. * libcsupport/src/__usrenv.c, libcsupport/src/newlibc_reent.c, libfs/src/devfs/devclose.c, libfs/src/devfs/devfs.h, libfs/src/devfs/devfs_eval.c, libfs/src/devfs/devfs_init.c, libfs/src/devfs/devfs_mknod.c, libfs/src/devfs/devfs_node_type.c, libfs/src/devfs/devfs_show.c, libfs/src/devfs/devioctl.c, libfs/src/devfs/devopen.c, libfs/src/devfs/devread.c, libfs/src/devfs/devstat.c, libfs/src/devfs/devwrite.c, libfs/src/imfs/deviceerrno.c: New files. * libcsupport/src/newlibc.c: Removed.
92 lines
2.4 KiB
C
92 lines
2.4 KiB
C
/*
|
|
* 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.
|
|
*/
|
|
|
|
if (rtems_fs_init_helper)
|
|
(* rtems_fs_init_helper)();
|
|
}
|