forked from Imagelibrary/rtems
libcsupport: Delete libc_wrapup()
Add and use rtems_libio_exit_helper. Add rtems_libio_exit(). The fclose(stdin) etc. makes no sense during exit. This would use the _REENT structure of the thread calling _exit().
This commit is contained in:
@@ -56,6 +56,7 @@ BASE_FS_C_FILES = src/base_fs.c src/mount.c src/unmount.c src/libio.c \
|
|||||||
src/mount-mgr.c src/mount-mktgt.c src/libio_init.c \
|
src/mount-mgr.c src/mount-mktgt.c src/libio_init.c \
|
||||||
src/privateenv.c \
|
src/privateenv.c \
|
||||||
src/libio_helper_null.c \
|
src/libio_helper_null.c \
|
||||||
|
src/libio_exit.c \
|
||||||
src/open_dev_console.c src/__usrenv.c src/rtems_mkdir.c
|
src/open_dev_console.c src/__usrenv.c src/rtems_mkdir.c
|
||||||
|
|
||||||
TERMIOS_C_FILES = src/cfgetispeed.c src/cfgetospeed.c src/cfsetispeed.c \
|
TERMIOS_C_FILES = src/cfgetispeed.c src/cfgetospeed.c src/cfsetispeed.c \
|
||||||
|
|||||||
@@ -1392,12 +1392,16 @@ extern const rtems_libio_helper rtems_libio_init_helper;
|
|||||||
|
|
||||||
extern const rtems_libio_helper rtems_libio_post_driver_helper;
|
extern const rtems_libio_helper rtems_libio_post_driver_helper;
|
||||||
|
|
||||||
|
extern const rtems_libio_helper rtems_libio_exit_helper;
|
||||||
|
|
||||||
extern const rtems_libio_helper rtems_fs_init_helper;
|
extern const rtems_libio_helper rtems_fs_init_helper;
|
||||||
|
|
||||||
void rtems_libio_helper_null(void);
|
void rtems_libio_helper_null(void);
|
||||||
|
|
||||||
void rtems_libio_post_driver(void);
|
void rtems_libio_post_driver(void);
|
||||||
|
|
||||||
|
void rtems_libio_exit(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Creates a directory and all its parent directories according to
|
* @brief Creates a directory and all its parent directories according to
|
||||||
* @a path.
|
* @a path.
|
||||||
|
|||||||
34
cpukit/libcsupport/src/libio_exit.c
Normal file
34
cpukit/libcsupport/src/libio_exit.c
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @ingroup LibIO
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2013 embedded brains GmbH. All rights reserved.
|
||||||
|
*
|
||||||
|
* embedded brains GmbH
|
||||||
|
* Obere Lagerstr. 30
|
||||||
|
* 82178 Puchheim
|
||||||
|
* Germany
|
||||||
|
* <rtems@embedded-brains.de>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <rtems/libio.h>
|
||||||
|
|
||||||
|
void rtems_libio_exit(void)
|
||||||
|
{
|
||||||
|
(void)close(0);
|
||||||
|
(void)close(1);
|
||||||
|
(void)close(2);
|
||||||
|
}
|
||||||
@@ -11,37 +11,14 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
|
||||||
#include <rtems.h>
|
#include <rtems.h>
|
||||||
|
|
||||||
#if defined(RTEMS_NEWLIB)
|
#if defined(RTEMS_NEWLIB)
|
||||||
#include <rtems/libcsupport.h>
|
#include <rtems/libio.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
static void libc_wrapup(void)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* In case RTEMS is already down, don't do this. It could be
|
|
||||||
* dangerous.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!_System_state_Is_up(_System_state_Get()))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Try to drain output buffers.
|
|
||||||
*
|
|
||||||
* Should this be changed to do *all* file streams?
|
|
||||||
* _fwalk (_REENT, fclose);
|
|
||||||
*/
|
|
||||||
|
|
||||||
fclose (stdin);
|
|
||||||
fclose (stdout);
|
|
||||||
fclose (stderr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: These defines are a blatant hack */
|
/* FIXME: These defines are a blatant hack */
|
||||||
|
|
||||||
#if defined(__USE_INIT_FINI__)
|
#if defined(__USE_INIT_FINI__)
|
||||||
@@ -66,7 +43,7 @@ void _exit(int status)
|
|||||||
FINI_SYMBOL();
|
FINI_SYMBOL();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
libc_wrapup();
|
(*rtems_libio_exit_helper)();
|
||||||
rtems_shutdown_executive(status);
|
rtems_shutdown_executive(status);
|
||||||
for (;;) ; /* to avoid warnings */
|
for (;;) ; /* to avoid warnings */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,6 +106,13 @@ const rtems_libio_helper rtems_libio_post_driver_helper =
|
|||||||
rtems_libio_post_driver;
|
rtems_libio_post_driver;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const rtems_libio_helper rtems_libio_exit_helper =
|
||||||
|
#ifdef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
|
||||||
|
rtems_libio_helper_null;
|
||||||
|
#else
|
||||||
|
rtems_libio_exit;
|
||||||
|
#endif
|
||||||
|
|
||||||
const rtems_libio_helper rtems_fs_init_helper =
|
const rtems_libio_helper rtems_fs_init_helper =
|
||||||
#ifdef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
|
#ifdef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
|
||||||
rtems_libio_helper_null;
|
rtems_libio_helper_null;
|
||||||
|
|||||||
Reference in New Issue
Block a user