summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>2009-03-19 01:00:54 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>2009-03-19 01:00:54 +0000
commit8e37f503496ad3592bbb53ad55abdf0a0b6d91c5 (patch)
tree385bc21312aff69a6feafe16ce9f72dae6b15bea
parentb2577ed369274f6ceb509e9b011d3fcd0823e79a (diff)
downloadATCD-8e37f503496ad3592bbb53ad55abdf0a0b6d91c5.tar.gz
ChangeLogTag:Wed
-rw-r--r--ACE/ChangeLog9
-rw-r--r--ACE/THANKS1
-rw-r--r--ACE/ace/OS_NS_unistd.h3
-rw-r--r--ACE/ace/OS_NS_unistd.inl34
4 files changed, 47 insertions, 0 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog
index d579d80fa3f..c64f2f0c540 100644
--- a/ACE/ChangeLog
+++ b/ACE/ChangeLog
@@ -1,3 +1,12 @@
+Wed Mar 18 14:48:23 UTC 2009 Douglas C. Schmidt <schmidt@dre.vanderbilt.edu>
+
+ * ace/OS_NS_unistd.{h,inl}: Added a new ACE_OS::dup() method with
+ one more parameter as process id of target process
+ [ACE_OS:dup(ACE_HANDLE handle, int pid)], so that handle
+ duplicated by dup() can be used in target process. Thanks to
+ kashif khan <kashif_khan198227 at yahoo dot com> for
+ contributing this.
+
Wed Mar 18 14:28:22 UTC 2009 Johnny Willemsen <jwillemsen@remedy.nl>
* protocols/ace/RMCast/Acknowledge.cpp:
diff --git a/ACE/THANKS b/ACE/THANKS
index 08a50af3ca7..bcb3586152e 100644
--- a/ACE/THANKS
+++ b/ACE/THANKS
@@ -2279,6 +2279,7 @@ Ron van Hoof <rvhoof27 at gmail dot com>
Joe Lihn <joelihn at hotmail dot com>
Jani Hakala <jahakala at iki dot fi>
Marcus Monaghan <marcus dot monaghan at wins dot co dot uk>
+Kashif Khan <kashif_khan198227 at yahoo dot com>
I would particularly like to thank Paul Stephenson, who worked with me
at Ericsson in the early 1990's. Paul devised the recursive Makefile
diff --git a/ACE/ace/OS_NS_unistd.h b/ACE/ace/OS_NS_unistd.h
index b44188cb45a..aaa36f2d827 100644
--- a/ACE/ace/OS_NS_unistd.h
+++ b/ACE/ace/OS_NS_unistd.h
@@ -99,6 +99,9 @@ namespace ACE_OS
ACE_HANDLE dup (ACE_HANDLE handle);
ACE_NAMESPACE_INLINE_FUNCTION
+ ACE_HANDLE dup (ACE_HANDLE handle, int pid);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
int dup2 (ACE_HANDLE oldfd,
ACE_HANDLE newfd);
diff --git a/ACE/ace/OS_NS_unistd.inl b/ACE/ace/OS_NS_unistd.inl
index 6605948c4fa..a5584f0b9a3 100644
--- a/ACE/ace/OS_NS_unistd.inl
+++ b/ACE/ace/OS_NS_unistd.inl
@@ -216,6 +216,40 @@ ACE_OS::dup (ACE_HANDLE handle)
#endif /* ACE_LACKS_DUP */
}
+ACE_INLINE ACE_HANDLE
+ACE_OS:dup(ACE_HANDLE handle, int pid)
+{
+ ACE_OS_TRACE("ACE_OS::dup");
+#define(ACE_WIN32)&&!defined(ACE_HAS_WINCE)
+ ACE_HADLE new_fd;
+ ACE_HANDLE hTargetProcess = ::OpenProcess (PROCESS_DUP_HANDLE,
+ FALSE,
+ pid);
+ if(::DuplicateHandle(::GetCurrentProcess (),
+ handle,
+ hTargetProcess,
+ &new_fd,
+ 0,
+ TRUE,
+ DUPLICATE_SAME_ACCESS))
+ {
+ ::CloseHandle (hTargetProcess);
+ return new_fd;
+ }
+ else
+ ACE_FAIL_RETURN (ACE_INVALID_HANDLE);
+ /*NOTREACHED*/
+#elif defined(ACE_LACKS_DUP)
+ ACE_UNUSED_ARGS(handle);
+ ACE_NOTSUP_RETURN(-1);
+#elif defined(ACE_HAS_WINCE)
+ ACE_UNUSED_ARG(handle)
+ ACE_NOTSUP_RETURN(0);
+#else
+ ACE_OSCALL_RETURN(::dup(handle), ACE_HANDLE, ACE_INVALID_HANDLE);
+#endif /*ACE_WIN32 && !ACE_HAS_WINCE*/
+}
+
ACE_INLINE int
ACE_OS::dup2 (ACE_HANDLE oldhandle, ACE_HANDLE newhandle)
{