Question about the use of _newlib_flockfile_* in newlib
Tue Dec 18 08:45:00 GMT 2012
On Dec 17 21:42, Bin.Cheng wrote:
> On Mon, Dec 17, 2012 at 6:53 PM, Corinna Vinschen <firstname.lastname@example.org> wrote:
> > On Dec 17 10:06, Bin.Cheng wrote:
> >> Hi,
> >> I have two questions on _newlib_flockfile_*.
> >> 1.
> >> _fputc_r calls _putc_r to do the job, but both of them calls
> >> _newlib_flockfile_*. Is it OK? Why if it is.
> > I'm not quite sure, but I think the reason is that putc and, in analogy,
> > _putc_r might be defined as macro. Newlib doesn't do that by default
> > for _putc_r, but target-specific code could.
> >> 2. In most functions, the macro ORIENT() is guarded by
> >> _newlib_flockfile_*, but it is not in _puts_r. Anything special or
> >> just missed something?
> > I had a look into the CVS annotation and it seems that this is not about
> > ORIENT, but about the fact that the __sfvwrite_r call in _puts_r was
> > never guarded by a flockfile/funlockfile (the predecessor of
> > _newlib_flockfile_start/_newlib_flockfile_end).
> > I don't know why, though. Jeff?
> Another problem.
> In function _fwrite_r, there is code like:
> _newlib_flockfile_start (fp);
> ORIENT (fp, -1);
> if (__sfvwrite_r (ptr, fp, &uio) == 0)
> _newlib_flockfile_exit (fp);
> return count;
> _newlib_flockfile_end (fp);
> return (n - uio.uio_resid) / size;
> I think _newlib_flockfile_exit and _newlib_flockfile_end are
> mis-placed with each other, right?
No, that's correct. See libc/stdio/local.h.
Cygwin Project Co-Leader
More information about the Newlib