Re: Problem with recent change to getlocalename_l

Corinna Vinschen <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
On Feb  1 20:11, Corinna Vinschen wrote:
> No, wait.
> 
> On Feb  1 20:00, Corinna Vinschen wrote:
> > Given that this new functionality needs a 32 byte buffer, and given that
> > _REENT_SMALL targets are... well... small, I made the new buffer
> > optional via `#ifdef _MB_CAPABLE' in struct _misc_reent, which only used
> > by _REENT_SMALL targets.
> > 
> > Apparently I missed to take the _REENT_CHECK_MISC expression into account.
> > AFAICS the culprit is the _REENT_INIT_MISC macro now.
> > 
> > Can you please check if this change fixes the problem?
> 
> Try this one instead, please:

Sorry, I suddenly realized that I screwed up the name of the new member
as well.  Sigh.

Please try this one, it's also much simpler:

diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
index 4e60c3096ae2..0cba1667cc66 100644
--- a/newlib/libc/include/sys/reent.h
+++ b/newlib/libc/include/sys/reent.h
@@ -514,6 +514,11 @@ struct _reent
 #define _REENT_CHECK_EMERGENCY(var) \
   _REENT_CHECK(var, _emergency, char *, _REENT_EMERGENCY_SIZE, /* nothing */)
 
+#ifdef _MB_CAPABLE
+#define __REENT_INIT_MISC_GETLOCALENAME_L _r->_misc->_getlocalename_l_buf[0] = '\0'
+#else
+#define __REENT_INIT_MISC_GETLOCALENAME_L
+#endif
 #define _REENT_INIT_MISC(var) do { \
   struct _reent *_r = (var); \
   _r->_misc->_strtok_last = _NULL; \
@@ -533,7 +538,7 @@ struct _reent
   _r->_misc->_wcrtomb_state.__value.__wch = 0; \
   _r->_misc->_wcsrtombs_state.__count = 0; \
   _r->_misc->_wcsrtombs_state.__value.__wch = 0; \
-  _r->_misc->_getlocale_l_buf[0] = '\0'; \
+  __REENT_INIT_MISC_GETLOCALENAME_L; \
   _r->_misc->_l64a_buf[0] = '\0'; \
   _r->_misc->_getdate_err = 0; \
 } while (0)


Sorry,
Corinna
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.