[PATCH 09/14] Add _REENT_CLEANUP(ptr)

Sebastian Huber <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
From: Matt Joyce <[email protected]>

Add a _REENT_CLEANUP() macro to encapsulate access to the
__cleanup member of struct reent. This will help to replace the
struct member with a thread-local storage object in a follow up
patch.
---
 newlib/libc/include/sys/reent.h  | 1 +
 newlib/libc/machine/spu/c99ppe.h | 2 +-
 newlib/libc/machine/spu/stdio.c  | 2 +-
 newlib/libc/reent/reent.c        | 4 ++--
 newlib/libc/stdio/findfp.c       | 4 ++--
 newlib/libc/stdio/local.h        | 2 +-
 newlib/libc/stdio/setvbuf.c      | 2 +-
 newlib/libc/sys/arm/syscalls.c   | 2 +-
 winsup/cygwin/cygtls.cc          | 2 +-
 winsup/cygwin/dcrt0.cc           | 2 +-
 10 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
index 4296188f5..3d277638f 100644
--- a/newlib/libc/include/sys/reent.h
+++ b/newlib/libc/include/sys/reent.h
@@ -718,6 +718,7 @@ struct _reent
 
 #endif /* !_REENT_SMALL */
 
+#define _REENT_CLEANUP(_ptr)	((_ptr)->__cleanup)
 #define _REENT_EMERGENCY(_ptr)	((_ptr)->_emergency)
 #define _REENT_ERRNO(_ptr)	((_ptr)->_errno)
 #define _REENT_INC(_ptr)	((_ptr)->_inc)
diff --git a/newlib/libc/machine/spu/c99ppe.h b/newlib/libc/machine/spu/c99ppe.h
index 263cf7fe0..7b3fcb6b7 100644
--- a/newlib/libc/machine/spu/c99ppe.h
+++ b/newlib/libc/machine/spu/c99ppe.h
@@ -104,6 +104,6 @@ FILE  *__sfp (struct _reent *);
 #define __sfp_free(fp) ( (fp)->_fp = 0 )
 
 #define CHECK_INIT(ptr) \
-  do { if ((ptr) && !(ptr)->__cleanup) __sinit (ptr); } while (0)
+  do { if ((ptr) && !_REENT_CLEANUP(ptr)) __sinit (ptr); } while (0)
 #define CHECK_STR_INIT(ptr) /* currently, do nothing */
 #endif /* __ASSEMBLER__ */
diff --git a/newlib/libc/machine/spu/stdio.c b/newlib/libc/machine/spu/stdio.c
index 83a60c06b..fd45b0014 100644
--- a/newlib/libc/machine/spu/stdio.c
+++ b/newlib/libc/machine/spu/stdio.c
@@ -65,7 +65,7 @@ __cleanup (struct _reent *s)
 void
 __sinit (struct _reent *s)
 {
-  s->__cleanup = __cleanup;
+  _REENT_CLEANUP(s) = __cleanup;
 
   _REENT_STDIN(s) = &s->__sf[0];
   _REENT_STDIN(s)->_fp = SPE_STDIN;
diff --git a/newlib/libc/reent/reent.c b/newlib/libc/reent/reent.c
index a9d44b455..16ac04e22 100644
--- a/newlib/libc/reent/reent.c
+++ b/newlib/libc/reent/reent.c
@@ -86,11 +86,11 @@ _reclaim_reent (struct _reent *ptr)
 	  if (ptr->_sig_func)
 	_free_r (ptr, ptr->_sig_func);*/
 
-      if (ptr->__cleanup)
+      if (_REENT_CLEANUP(ptr))
 	{
 	  /* cleanup won't reclaim memory 'coz usually it's run
 	     before the program exits, and who wants to wait for that? */
-	  ptr->__cleanup (ptr);
+	  _REENT_CLEANUP(ptr) (ptr);
 	}
 
       /* Malloc memory not reclaimed; no good way to return memory anyway. */
diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c
index 3c888d03c..fbdb7f2f2 100644
--- a/newlib/libc/stdio/findfp.c
+++ b/newlib/libc/stdio/findfp.c
@@ -235,14 +235,14 @@ __sinit (struct _reent *s)
 {
   __sfp_lock_acquire ();
 
-  if (s->__cleanup)
+  if (_REENT_CLEANUP(s))
     {
       __sfp_lock_release ();
       return;
     }
 
   /* make sure we clean up on exit */
-  s->__cleanup = cleanup_stdio;	/* conservative */
+  _REENT_CLEANUP(s) = cleanup_stdio;	/* conservative */
 
   global_stdio_init ();
   __sfp_lock_release ();
diff --git a/newlib/libc/stdio/local.h b/newlib/libc/stdio/local.h
index 9b355e3ac..24eaff351 100644
--- a/newlib/libc/stdio/local.h
+++ b/newlib/libc/stdio/local.h
@@ -197,7 +197,7 @@ extern _READ_WRITE_RETURN_TYPE __swrite64 (struct _reent *, void *,
   do								\
     {								\
       struct _reent *_check_init_ptr = (ptr);			\
-      if ((_check_init_ptr) && !(_check_init_ptr)->__cleanup)	\
+      if ((_check_init_ptr) && !_REENT_CLEANUP(_check_init_ptr))\
 	__sinit (_check_init_ptr);				\
     }								\
   while (0)
diff --git a/newlib/libc/stdio/setvbuf.c b/newlib/libc/stdio/setvbuf.c
index 46c58a7b8..e27ea086c 100644
--- a/newlib/libc/stdio/setvbuf.c
+++ b/newlib/libc/stdio/setvbuf.c
@@ -174,7 +174,7 @@ nbf:
    * We're committed to buffering from here, so make sure we've
    * registered to flush buffers on exit.
    */
-  if (!reent->__cleanup)
+  if (!_REENT_CLEANUP(reent))
     __sinit(reent);
 
 #ifdef _FSEEK_OPTIMIZATION
diff --git a/newlib/libc/sys/arm/syscalls.c b/newlib/libc/sys/arm/syscalls.c
index 4b9be701a..325c0117f 100644
--- a/newlib/libc/sys/arm/syscalls.c
+++ b/newlib/libc/sys/arm/syscalls.c
@@ -60,7 +60,7 @@ extern void   __sinit (struct _reent *);
 #define CHECK_INIT(ptr) \
   do						\
     {						\
-      if ((ptr) && !(ptr)->__cleanup)		\
+      if ((ptr) && !_REENT_CLEANUP(ptr))	\
 	__sinit (ptr);				\
     }						\
   while (0)
diff --git a/winsup/cygwin/cygtls.cc b/winsup/cygwin/cygtls.cc
index 866342613..d0f4426c8 100644
--- a/winsup/cygwin/cygtls.cc
+++ b/winsup/cygwin/cygtls.cc
@@ -55,7 +55,7 @@ _cygtls::init_thread (void *x, DWORD (*func) (void *, void *))
       _REENT_INIT_PTR (&local_clib);
       stackptr = stack;
       altstack.ss_flags = SS_DISABLE;
-      if (_GLOBAL_REENT->__cleanup)
+      if (_REENT_CLEANUP(_GLOBAL_REENT))
 	local_clib.__cleanup = _cygtls::cleanup_early;
     }
 
diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc
index 9cbb8908f..897a2fba3 100644
--- a/winsup/cygwin/dcrt0.cc
+++ b/winsup/cygwin/dcrt0.cc
@@ -800,7 +800,7 @@ main_thread_sinit ()
      read or written in the first stdio function call in the main thread.
 
      To fix this issue we set __cleanup to _cygtls::cleanup_early here. */
-  _REENT->__cleanup = _cygtls::cleanup_early;
+  _REENT_CLEANUP(_REENT) = _cygtls::cleanup_early;
 }
 
 /* Take over from libc's crt0.o and start the application. Note the
-- 
2.35.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.