[PATCH] Do not break buffers in fvwrite for unbuffered files

Corinna Vinschen vinschen@redhat.com
Mon Oct 21 12:47:00 GMT 2013


On Oct 21 14:19, Federico wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> On 10/21/2013 01:54 PM, Corinna Vinschen wrote:
> > On Oct 21 10:36, Federico wrote:
> >> -	  w = fp->_write (ptr, fp->_cookie, p, MIN (len, BUFSIZ)); +
> >> w = fp->_write (ptr, fp->_cookie, p, len);
> > 
> > As noted in my other reply, len is size_t but the parameter to
> > _write may be int, even after my _READ_WRITE_BUFSIZE_TYPE patch has
> > been applied.
> > 
> > Therefore the type size difference still has to be accounted for. 
> > Maybe something like this is sufficient:
> > 
> > w = fp->_write (ptr, fp->_cookie, p, MIN (len, MAX_INT));
> > 
> > ???
> > 
> > 
> > Thanks, Corinna
> > 
> 
> First of all I'm happy to know that my profiling work is useful to
> other targets as well.
> Thanks for the patch review, didn't notice the type problem as my
> target still uses int for file offsets.
> Your solution using MAX_INT is more than satisfactory, as it would
> only split *really* large buffers in 2GByte chunks. In my target
> (microcontrollers with limited RAM amount), this will simply never
> happen, while on other targets the overhead of one syscall every
> 2GByte is probably of no concern.

Maye it makes sense to use the largest multiple  of BUFSIZ <= MAX_INT.
See below.
> 
> I'm wondering if it makes sense to avoid splitting writes (and reads)
> also for buffered files. glibc appears to do it,

Buffered writes are already split into fp->_bf._size chunks.  Glibc
basically uses the largest multiple of fp->_bf._size <= len instead.
We could do the same.  Would you like to create a patch for that?


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20131021/59f66bb7/attachment.sig>


More information about the Newlib mailing list