[PATCH 13/14] Add _REENT_IS_NULL()

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

In a follow up patch, struct _reent is optionally replaced by dedicated
thread-local objects.  In this case,_REENT is optionally defined to NULL.  Add
the _REENT_IS_NULL() macro to disable this check on demand.
---
 newlib/libc/include/sys/reent.h  | 2 ++
 newlib/libc/machine/spu/c99ppe.h | 8 +++++++-
 newlib/libc/stdio/local.h        | 3 ++-
 newlib/libc/sys/arm/syscalls.c   | 3 ++-
 4 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
index fa9c6cf82..90f848180 100644
--- a/newlib/libc/include/sys/reent.h
+++ b/newlib/libc/include/sys/reent.h
@@ -763,6 +763,8 @@ extern struct _reent _impure_data __ATTRIBUTE_IMPURE_DATA__;
 # define _REENT _impure_ptr
 #endif /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
 
+#define _REENT_IS_NULL(_ptr) ((_ptr) == NULL)
+
 #define _GLOBAL_REENT (&_impure_data)
 
 /* This value is used in stdlib/misc.c.  reent/reent.c has to know it
diff --git a/newlib/libc/machine/spu/c99ppe.h b/newlib/libc/machine/spu/c99ppe.h
index 7b3fcb6b7..6e03d2cb9 100644
--- a/newlib/libc/machine/spu/c99ppe.h
+++ b/newlib/libc/machine/spu/c99ppe.h
@@ -104,6 +104,12 @@ FILE  *__sfp (struct _reent *);
 #define __sfp_free(fp) ( (fp)->_fp = 0 )
 
 #define CHECK_INIT(ptr) \
-  do { if ((ptr) && !_REENT_CLEANUP(ptr)) __sinit (ptr); } while (0)
+  do						\
+    {						\
+      if (!_REENT_IS_NULL(ptr) &&		\
+	  !_REENT_CLEANUP(ptr))			\
+	__sinit (ptr);				\
+    }						\
+  while (0)
 #define CHECK_STR_INIT(ptr) /* currently, do nothing */
 #endif /* __ASSEMBLER__ */
diff --git a/newlib/libc/stdio/local.h b/newlib/libc/stdio/local.h
index 24eaff351..b34c7c9d8 100644
--- a/newlib/libc/stdio/local.h
+++ b/newlib/libc/stdio/local.h
@@ -197,7 +197,8 @@ extern _READ_WRITE_RETURN_TYPE __swrite64 (struct _reent *, void *,
   do								\
     {								\
       struct _reent *_check_init_ptr = (ptr);			\
-      if ((_check_init_ptr) && !_REENT_CLEANUP(_check_init_ptr))\
+      if (!_REENT_IS_NULL(_check_init_ptr) &&			\
+	  !_REENT_CLEANUP(_check_init_ptr))			\
 	__sinit (_check_init_ptr);				\
     }								\
   while (0)
diff --git a/newlib/libc/sys/arm/syscalls.c b/newlib/libc/sys/arm/syscalls.c
index 325c0117f..dd49ca061 100644
--- a/newlib/libc/sys/arm/syscalls.c
+++ b/newlib/libc/sys/arm/syscalls.c
@@ -60,7 +60,8 @@ extern void   __sinit (struct _reent *);
 #define CHECK_INIT(ptr) \
   do						\
     {						\
-      if ((ptr) && !_REENT_CLEANUP(ptr))	\
+      if (!_REENT_IS_NULL(ptr) &&		\
+	  !_REENT_CLEANUP(ptr))			\
 	__sinit (ptr);				\
     }						\
   while (0)
-- 
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.