diff options
author | wrowe <wrowe@13f79535-47bb-0310-9956-ffa450edef68> | 2002-02-13 02:28:56 +0000 |
---|---|---|
committer | wrowe <wrowe@13f79535-47bb-0310-9956-ffa450edef68> | 2002-02-13 02:28:56 +0000 |
commit | 5c848c3f271fa8256cb303726cdcfd6397b91ceb (patch) | |
tree | 025ab6a93f6597a116febc10ee1c83df03caddac | |
parent | 9a7ddf517d3b3e14d41d8ad433535fd6b8c53752 (diff) | |
download | libapr-5c848c3f271fa8256cb303726cdcfd6397b91ceb.tar.gz |
Outch. Compare the appropriate file handle! Then close the target if
it is valid, in any case.
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@62974 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | file_io/win32/filedup.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/file_io/win32/filedup.c b/file_io/win32/filedup.c index e962bc0af..a5ef11c74 100644 --- a/file_io/win32/filedup.c +++ b/file_io/win32/filedup.c @@ -106,13 +106,13 @@ APR_DECLARE(apr_status_t) apr_file_dup2(apr_file_t *new_file, * and close and replace other handles with duped handles. * The os_handle will change, however. */ - if (old_file->filehand == GetStdHandle(STD_ERROR_HANDLE)) { + if (new_file->filehand == GetStdHandle(STD_ERROR_HANDLE)) { stdhandle = STD_ERROR_HANDLE; } - else if (old_file->filehand == GetStdHandle(STD_OUTPUT_HANDLE)) { + else if (new_file->filehand == GetStdHandle(STD_OUTPUT_HANDLE)) { stdhandle = STD_OUTPUT_HANDLE; } - else if (old_file->filehand == GetStdHandle(STD_INPUT_HANDLE)) { + else if (new_file->filehand == GetStdHandle(STD_INPUT_HANDLE)) { stdhandle = STD_INPUT_HANDLE; } @@ -133,12 +133,13 @@ APR_DECLARE(apr_status_t) apr_file_dup2(apr_file_t *new_file, FALSE, DUPLICATE_SAME_ACCESS)) { return apr_get_os_error(); } - if (new_file->filehand) { - CloseHandle(new_file->filehand); - } newflags = old_file->flags & ~APR_INHERIT; } + if (new_file->filehand && (new_file->filehand != INVALID_HANDLE_VALUE)) { + CloseHandle(new_file->filehand); + } + new_file->flags = newflags; new_file->filehand = newhand; new_file->fname = apr_pstrdup(new_file->cntxt, old_file->fname); |