summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwrowe <wrowe@13f79535-47bb-0310-9956-ffa450edef68>2003-03-19 02:08:28 +0000
committerwrowe <wrowe@13f79535-47bb-0310-9956-ffa450edef68>2003-03-19 02:08:28 +0000
commit9367b35ed3b689fda78dd071b22ef09ce546d9c4 (patch)
tree1050ed598f27cb127a04cafde1555890aa86cbe4
parent9fbda5b61d60512d26277031fad04c082ef81f35 (diff)
downloadlibapr-9367b35ed3b689fda78dd071b22ef09ce546d9c4.tar.gz
Bug Fix #1 .. Move the special-case of Netware into _dup_file() where
it belongs (this will be evident in bug #2). The patch fixes a fd leak on Netware where each call to apr_file_dup2 failed to close the original fd. git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@64423 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--file_io/unix/filedup.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/file_io/unix/filedup.c b/file_io/unix/filedup.c
index 7083286fe..e5cc94621 100644
--- a/file_io/unix/filedup.c
+++ b/file_io/unix/filedup.c
@@ -78,7 +78,15 @@ static apr_status_t _file_dup(apr_file_t **new_file,
}
if (which_dup == 2) {
+#ifdef NETWARE
+ /* Apparently Netware doesn't support dup2... instead
+ * close() then dup()
+ */
+ close((*new_file)->filedes);
+ rv = ((*new_file)->filedes = dup(old_file->filedes));
+#else
rv = dup2(old_file->filedes, (*new_file)->filedes);
+#endif
} else {
rv = ((*new_file)->filedes = dup(old_file->filedes));
}
@@ -141,11 +149,7 @@ APR_DECLARE(apr_status_t) apr_file_dup(apr_file_t **new_file,
APR_DECLARE(apr_status_t) apr_file_dup2(apr_file_t *new_file,
apr_file_t *old_file, apr_pool_t *p)
{
-#ifdef NETWARE
- return _file_dup(&new_file, old_file, p, 1);
-#else
return _file_dup(&new_file, old_file, p, 2);
-#endif
}
APR_DECLARE(apr_status_t) apr_file_setaside(apr_file_t **new_file,