]> sourceware.org Git - newlib-cygwin.git/commitdiff
Add two __sglue initialization macros
authorMatt Joyce <matthew.joyce@embedded-brains.de>
Tue, 5 Apr 2022 09:40:19 +0000 (11:40 +0200)
committerSebastian Huber <sebastian.huber@embedded-brains.de>
Fri, 13 May 2022 10:28:34 +0000 (12:28 +0200)
Added _REENT_INIT_SGLUE and _REENT_INIT_SGLUE_ZEROED macros
to initialize __sglue member of struct _reent. This allows
further simplification of __sinit() and facilitates the removal
of __sglue as a member of struct _reent for certain configurations
in a follow-on patch.

newlib/libc/include/sys/reent.h
newlib/libc/stdio/findfp.c

index e0b0ccffbba578548be3f87c5b1cd5b48048df03..4b0d68610a1100291d50eab59eb4e5ddaed7b355 100644 (file)
@@ -702,8 +702,14 @@ struct _reent
 
 #ifdef _REENT_GLOBAL_STDIO_STREAMS
 #define _REENT_STDIO_STREAM(var, index) &__sf[index]
+#define _REENT_INIT_SGLUE(_ptr) { _NULL, 0, _NULL }
+#define _REENT_INIT_SGLUE_ZEROED(_ptr) /* nothing to set */
 #else
 #define _REENT_STDIO_STREAM(var, index) &(var)->__sf[index]
+#define _REENT_INIT_SGLUE(_ptr) { _NULL, 3, &(_ptr)->__sf[0] }
+#define _REENT_INIT_SGLUE_ZEROED(_ptr) \
+  (_ptr)->__sglue._niobs = 3; \
+  (_ptr)->__sglue._iobs = &(_ptr)->__sf[0];
 #endif
 
 #define _REENT_INIT(var) \
@@ -751,7 +757,7 @@ struct _reent
     }, \
     _REENT_INIT_ATEXIT \
     _NULL, \
-    {_NULL, 0, _NULL} \
+    _REENT_INIT_SGLUE(&(var)) \
   }
 
 #define _REENT_INIT_PTR_ZEROED(var) \
@@ -766,6 +772,7 @@ struct _reent
     (var)->_new._reent._r48._mult[1] = _RAND48_MULT_1; \
     (var)->_new._reent._r48._mult[2] = _RAND48_MULT_2; \
     (var)->_new._reent._r48._add = _RAND48_ADD; \
+    _REENT_INIT_SGLUE_ZEROED(var) \
   }
 
 #define _REENT_CHECK_RAND48(ptr)       /* nothing */
index 8327b19928ff1e04204bc7c6c4f268949fdb9200..66867e664c03d51e994f6c4980000a7a74c5e4fb 100644 (file)
@@ -246,12 +246,7 @@ __sinit (struct _reent *s)
   /* make sure we clean up on exit */
   s->__cleanup = cleanup_stdio;        /* conservative */
 
-#ifndef _REENT_SMALL
-# ifndef _REENT_GLOBAL_STDIO_STREAMS
-  s->__sglue._niobs = 3;
-  s->__sglue._iobs = &s->__sf[0];
-# endif /* _REENT_GLOBAL_STDIO_STREAMS */
-#else
+#ifdef _REENT_SMALL
 # ifndef _REENT_GLOBAL_STDIO_STREAMS
   s->_stdin = __sfp(s);
   s->_stdout = __sfp(s);
This page took 0.03168 seconds and 5 git commands to generate.