I ran into a problem earlier today calling apr_file_copy where the
from_path and the to_path parameters are the same. The issue is that in
apr_file_transfer_contents the from file is opened with the APR_READ
flag and then the to file (being the same) opens the file with APR_WRITE
| APR_CREATE | APR_TRUNCATE flags set. This causes the file to be
truncated to 0 bytes and the transfer ends pretty quickly.
Is this a bug or is this expected behavior with the file_io subsystem?
I'm new to the apr source code so I'm attaching a diff of a change that
fixes the issue for me. Please let me know if it is good or bad or
otherwise.
Thanks,
Corey Olsen
Index: file_io/unix/copy.c
===================================================================
--- file_io/unix/copy.c (revision 629544)
+++ file_io/unix/copy.c (working copy)
@@ -28,6 +28,11 @@
apr_finfo_t finfo;
apr_fileperms_t perms;
+ if (apr_strnatcmp(from_path, to_path) == 0) {
+ status = APR_SUCCESS;
+ return status;
+ }
+
/* Open source file. */
status = apr_file_open(&s, from_path, APR_READ, APR_OS_DEFAULT,
pool);
if (status)