From 7881a70fad739dffb32ca51c10f9501d37172452 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 25 Apr 2013 15:29:19 +0000 Subject: [PATCH] 2013-04-25 Sebastian Huber * libc/stdio/local.h (_STDIO_CLOSE_PER_REENT_STD_STREAMS): New define. * libc/stdio/findfp.c (_STDIO_CLOSE_PER_REENT_STD_STREAMS): Use define. --- newlib/ChangeLog | 5 +++++ newlib/libc/stdio/findfp.c | 4 ++++ newlib/libc/stdio/local.h | 10 ++++++++++ 3 files changed, 19 insertions(+) diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 60074fc76..4f8ad0588 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,8 @@ +2013-04-25 Sebastian Huber + + * libc/stdio/local.h (_STDIO_CLOSE_PER_REENT_STD_STREAMS): New define. + * libc/stdio/findfp.c (_STDIO_CLOSE_PER_REENT_STD_STREAMS): Use define. + 2013-04-24 Corinna Vinschen Nick Clifton diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c index 7ab3bdba5..e40500a07 100644 --- a/newlib/libc/stdio/findfp.c +++ b/newlib/libc/stdio/findfp.c @@ -62,7 +62,11 @@ _DEFUN(std, (ptr, flags, file, data), ptr->_flags |= __SL64; #endif /* __LARGE64_FILES */ ptr->_seek = __sseek; +#ifdef _STDIO_CLOSE_PER_REENT_STD_STREAMS ptr->_close = __sclose; +#else /* _STDIO_CLOSE_STD_STREAMS */ + ptr->_close = NULL; +#endif /* _STDIO_CLOSE_STD_STREAMS */ #if !defined(__SINGLE_THREAD__) && !defined(_REENT_SMALL) __lock_init_recursive (ptr->_lock); /* diff --git a/newlib/libc/stdio/local.h b/newlib/libc/stdio/local.h index cbfeac77d..ec5efab49 100644 --- a/newlib/libc/stdio/local.h +++ b/newlib/libc/stdio/local.h @@ -32,6 +32,16 @@ # include #endif +/* The following define determines if the per-reent stdin, stdout and stderr + streams are closed during _reclaim_reent(). The stdin, stdout and stderr + streams are initialized to use file descriptors 0, 1 and 2 respectively. In + case _STDIO_CLOSE_PER_REENT_STD_STREAMS is defined these file descriptors + will be closed via close() provided the owner of the reent structure + triggerd the on demand reent initilization, see CHECK_INIT(). */ +#ifndef __rtems__ +#define _STDIO_CLOSE_PER_REENT_STD_STREAMS +#endif + /* The following macros are supposed to replace calls to _flockfile/_funlockfile and __sfp_lock_acquire/__sfp_lock_release. In case of multi-threaded environments using pthreads, it's not sufficient to lock the stdio functions