apr_file_t is an abstraction that covers the whole range of what can be a file (including pipes etc.) and how it can be used (multi-threading, overlapped I/O etc.). This limits the efficiency of its implementation. Design goals for svn_file_t: * Build upon non-buffered apr_file_t to get the platform support without any of the buffer management overhead. * Use it for "real files" with at most one writer process only. This allows for efficient file length and EOF detection. * Map an unlimited number of instances to a limited number of file handles. Handles to same file may be shared (depending on flags) and non-locking file handles may be closed temporarily. * Use (up to) two buffers instead of one per file to allow for efficient traversal in both directions. * Internalize seek() operations, i.e. don't pass them on to the OS. The current code is completely untested and does not fully comply with the design goals listed above.