Re: [PATCH v2] newlib: libc: Fix bugs in the commit 3d94e07c49b5.

Corinna Vinschen <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Hi Takashi,

On Nov 16 21:27, Takashi Yano wrote:
> Hi Corinna,
> 
> On Wed, 15 Nov 2023 17:31:39 +0100
> Corinna Vinschen wrote:
> > Hi Takashi,
> > 
> > On Nov 13 14:07, Corinna Vinschen wrote:
> > > On Nov 11 01:09, Takashi Yano wrote:
> > > > diff --git a/newlib/libc/stdio/ungetc.c b/newlib/libc/stdio/ungetc.c
> > > > index 79914af08..5053fd6c4 100644
> > > > --- a/newlib/libc/stdio/ungetc.c
> > > > +++ b/newlib/libc/stdio/ungetc.c
> > > > @@ -125,12 +125,6 @@ _ungetc_r (struct _reent *rptr,
> > > >  
> > > >    _newlib_flockfile_start (fp);
> > > >  
> > > > -  if (ORIENT (fp, -1) != -1)
> > > > -    {
> > > > -      _newlib_flockfile_exit (fp);
> > > > -      return EOF;
> > > > -    }
> > > > -
> > > >    /* After ungetc, we won't be at eof anymore */
> > > >    fp->_flags &= ~__SEOF;
> > > >  
> > > > @@ -213,6 +207,8 @@ int
> > > >  ungetc (int c,
> > > >         register FILE *fp)
> > > >  {
> > > > +  if (ORIENT (fp, -1) != -1)
> > > > +    return EOF;
> > > >    return _ungetc_r (_REENT, c, fp);
> > > >  }
> > > >  #endif /* !_REENT_ONLY */
> > > 
> > > As per the reasoning in terms of old standards, we shouldn't check or set
> > > the orientation in ungetc at all.
> > 
> > Given all that has been discussed, I attached a followup proposal.
> > I hope that's ok.  We may want to release 3.4.10 in the next weeks.
> 
> LGTM, except for:
> 1) Shouldn't we add flags2 = 0 also for _fmemopen_r(), _fopencookie_r(),
>    _funopen_r() and internal_open_memstream_r()?

Not necessary.  All three functions get the FILE* from a call to __sfp,
which always sets _flags2 to 0 anyway.

> 2) __swbuf_r() has ORIENT (fp, -1) call, however, result is not checked.

Good catch.  Looks like setting the orientation at this point is
wrong.  __swbuf_r is called via the __sputc_r macro in stdio.h.
But __sputc_r is also called from __fputwc as well as, potentially,
from _fputws_r.

AFAICS, we already set the orientation from the calling functions
_putc_r (covering putchar, putc, fputc) and from _puts_r as
well as _fputs_r (covering puts, fputs).

On the wide-char side, we set the orientation from _fputwc_r
(covering putwchar, putwc, fputwc) and from _fputws_r (covering
fputws).

So I *think* we can safely remove the ORIENT call from __swbuf_r,
or did I miss some other way to call __swbuf_r?


Thanks,
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.