You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by Frank Jas <fr...@jrware.com> on 2009/03/30 22:10:07 UTC
Possible problem with apr_file_dup() and apr_file_seek()?
Either I'm misusing apr_file_dup() and apr_file_seek() or there's a problem
with the apr_file_t filePtr field (using APR version 1.3.3).
Here's the sequence:
apr_file_open( f1, "myfile", APR_READ | APR_WRITE | APR_BUFFERED, ... );
apr_file_dup( f2, f1 );
read the contents of the file using f2
apr_file_truncate( f1, 0 );
write new contents into the file using f1.
The new contents appear starting at the byte offset equal to the original file
size rather than at the beginning of the file.
What's happening is the apr_file_seek() performed in apr_file_truncate()
doesn't actually call lseek() since its filePtr is still set to 0, eventhough
the system file position has been moved to the end of the file due to the
read using the duped file. This is because underlying file descriptors are
duped and share the file offset information, so reads on one will affect the
file position seen by the other.
Is this a bug or am I using these functions incorrectly? The rationale for the
duped file is that I wanted to copy the file w/o buffering, so I duped the
file and turned off buffering using apr_file_buffer_set().
Frank