OSDN Git Service

* fhandler.cc (fhandler_base::set_inheritance): If available,
authorcorinna <corinna>
Thu, 20 Sep 2001 08:02:00 +0000 (08:02 +0000)
committercorinna <corinna>
Thu, 20 Sep 2001 08:02:00 +0000 (08:02 +0000)
        use SetHandleInformation() to set inheritance.
        * wincap.cc: Set flag has_set_handle_information_on_console_handles
        appropriately.
        * wincap.h: Add flag has_set_handle_information_on_console_handles.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.cc
winsup/cygwin/wincap.cc
winsup/cygwin/wincap.h

index 0fc6b0b..342b152 100644 (file)
@@ -1,3 +1,11 @@
+Thu Sep 20  9:55:00 2001  Corinna Vinschen <corinna@vinschen.de>
+
+       * fhandler.cc (fhandler_base::set_inheritance): If available,
+       use SetHandleInformation() to set inheritance.
+       * wincap.cc: Set flag has_set_handle_information_on_console_handles
+       appropriately.
+       * wincap.h: Add flag has_set_handle_information_on_console_handles.
+
 Wed Sep 19 12:24:09 2001  Christopher Faylor <cgf@cygnus.com>
 
        * lib/getopt.c (__progname): Don't declare if not compiling for cygwin.
index 270c0d3..0f38e02 100644 (file)
@@ -1522,8 +1522,12 @@ fhandler_base::set_inheritance (HANDLE &h, int not_inheriting, const char *namep
 {
   HANDLE newh;
 
-  if (!DuplicateHandle (hMainProc, h, hMainProc, &newh, 0, !not_inheriting,
-                       DUPLICATE_SAME_ACCESS))
+  if (wincap.has_set_handle_information () && (!is_console () ||
+      wincap.has_set_handle_information_on_console_handles ()))
+    (void) SetHandleInformation (h, HANDLE_FLAG_INHERIT,
+                                not_inheriting ? 0 : HANDLE_FLAG_INHERIT);
+  else if (!DuplicateHandle (hMainProc, h, hMainProc, &newh, 0, !not_inheriting,
+                            DUPLICATE_SAME_ACCESS))
     debug_printf ("DuplicateHandle %E");
 #ifndef DEBUGGING
   else
index 117ed66..4026167 100644 (file)
@@ -29,6 +29,7 @@ static NO_COPY wincaps wincap_unknown = {
   has_eventlog:false,
   has_ip_helper_lib:false,
   has_set_handle_information:false,
+  has_set_handle_information_on_console_handles:false,
   supports_smp:false,
   map_view_of_file_ex_sucks:false,
   altgr_is_ctrl_alt:false,
@@ -62,6 +63,7 @@ static NO_COPY wincaps wincap_95 = {
   has_eventlog:false,
   has_ip_helper_lib:false,
   has_set_handle_information:false,
+  has_set_handle_information_on_console_handles:false,
   supports_smp:false,
   map_view_of_file_ex_sucks:true,
   altgr_is_ctrl_alt:false,
@@ -95,6 +97,7 @@ static NO_COPY wincaps wincap_95osr2 = {
   has_eventlog:false,
   has_ip_helper_lib:false,
   has_set_handle_information:false,
+  has_set_handle_information_on_console_handles:false,
   supports_smp:false,
   map_view_of_file_ex_sucks:true,
   altgr_is_ctrl_alt:false,
@@ -128,6 +131,7 @@ static NO_COPY wincaps wincap_98 = {
   has_eventlog:false,
   has_ip_helper_lib:true,
   has_set_handle_information:false,
+  has_set_handle_information_on_console_handles:false,
   supports_smp:false,
   map_view_of_file_ex_sucks:true,
   altgr_is_ctrl_alt:false,
@@ -161,6 +165,7 @@ static NO_COPY wincaps wincap_98se = {
   has_eventlog:false,
   has_ip_helper_lib:true,
   has_set_handle_information:false,
+  has_set_handle_information_on_console_handles:false,
   supports_smp:false,
   map_view_of_file_ex_sucks:true,
   altgr_is_ctrl_alt:false,
@@ -194,6 +199,7 @@ static NO_COPY wincaps wincap_me = {
   has_eventlog:false,
   has_ip_helper_lib:true,
   has_set_handle_information:false,
+  has_set_handle_information_on_console_handles:false,
   supports_smp:false,
   map_view_of_file_ex_sucks:true,
   altgr_is_ctrl_alt:false,
@@ -227,6 +233,7 @@ static NO_COPY wincaps wincap_nt3 = {
   has_eventlog:true,
   has_ip_helper_lib:false,
   has_set_handle_information:true,
+  has_set_handle_information_on_console_handles:false,
   supports_smp:false,
   map_view_of_file_ex_sucks:false,
   altgr_is_ctrl_alt:true,
@@ -260,6 +267,7 @@ static NO_COPY wincaps wincap_nt4 = {
   has_eventlog:true,
   has_ip_helper_lib:false,
   has_set_handle_information:true,
+  has_set_handle_information_on_console_handles:false,
   supports_smp:true,
   map_view_of_file_ex_sucks:false,
   altgr_is_ctrl_alt:true,
@@ -293,6 +301,7 @@ static NO_COPY wincaps wincap_nt4sp4 = {
   has_eventlog:true,
   has_ip_helper_lib:true,
   has_set_handle_information:true,
+  has_set_handle_information_on_console_handles:false,
   supports_smp:true,
   map_view_of_file_ex_sucks:false,
   altgr_is_ctrl_alt:true,
@@ -326,6 +335,7 @@ static NO_COPY wincaps wincap_2000 = {
   has_eventlog:true,
   has_ip_helper_lib:true,
   has_set_handle_information:true,
+  has_set_handle_information_on_console_handles:true,
   supports_smp:true,
   map_view_of_file_ex_sucks:false,
   altgr_is_ctrl_alt:true,
@@ -359,6 +369,7 @@ static NO_COPY wincaps wincap_xp = {
   has_eventlog:true,
   has_ip_helper_lib:true,
   has_set_handle_information:true,
+  has_set_handle_information_on_console_handles:true,
   supports_smp:true,
   map_view_of_file_ex_sucks:false,
   altgr_is_ctrl_alt:true,
index 903c719..0389476 100644 (file)
@@ -30,6 +30,7 @@ struct wincaps
   unsigned has_eventlog                                 : 1;
   unsigned has_ip_helper_lib                            : 1;
   unsigned has_set_handle_information                   : 1;
+  unsigned has_set_handle_information_on_console_handles: 1;
   unsigned supports_smp                                 : 1;
   unsigned map_view_of_file_ex_sucks                    : 1;
   unsigned altgr_is_ctrl_alt                            : 1;
@@ -77,6 +78,7 @@ public:
   bool  IMPLEMENT (has_eventlog)
   bool  IMPLEMENT (has_ip_helper_lib)
   bool  IMPLEMENT (has_set_handle_information)
+  bool  IMPLEMENT (has_set_handle_information_on_console_handles)
   bool  IMPLEMENT (supports_smp)
   bool  IMPLEMENT (map_view_of_file_ex_sucks)
   bool  IMPLEMENT (altgr_is_ctrl_alt)