Problem with recent change to getlocalename_l

Corinna Vinschen vinschen@redhat.com
Thu Feb 1 21:55:20 GMT 2024


On Feb  1 21:55, Torbjorn SVENSSON wrote:
> On 2024-02-01 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:
> > 
> > diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
> > index 4e60c3096ae2..1fd503b9a699 100644
> > --- a/newlib/libc/include/sys/reent.h
> > +++ b/newlib/libc/include/sys/reent.h
> > @@ -514,8 +514,8 @@ struct _reent
> >   #define _REENT_CHECK_EMERGENCY(var) \
> >     _REENT_CHECK(var, _emergency, char *, _REENT_EMERGENCY_SIZE, /* nothing */)
> > -#define _REENT_INIT_MISC(var) do { \
> > -  struct _reent *_r = (var); \
> > +/* Do not call directly, use _REENT_INIT_MISC(var) instead */
> 
> Maybe do an #undef after the _REENT_INIT_MISC has been define to prevent the
> __REENT_INIT_MISC_BODY symbol to be visible outside this block would work
> here?

No, this patch was dumb.  Better give the one from
https://sourceware.org/pipermail/newlib/2024/021006.html
a try.


Thanks,
Corinna



More information about the Newlib mailing list