]> sourceware.org Git - newlib-cygwin.git/commitdiff
Cygwin: console: Fix a bug that 64th console cannot be handled.
authorTakashi Yano <takashi.yano@nifty.ne.jp>
Thu, 15 Feb 2024 18:35:07 +0000 (03:35 +0900)
committerTakashi Yano <takashi.yano@nifty.ne.jp>
Thu, 15 Feb 2024 19:06:01 +0000 (04:06 +0900)
Fixes: 930e553da8e9 ("Cygwin: console: Unify EnumWindows() callback functions.");
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
winsup/cygwin/devices.cc
winsup/cygwin/devices.in
winsup/cygwin/fhandler/console.cc
winsup/cygwin/local_includes/fhandler.h

index 5b67fd1dad7aec26696f755f1b474930a16d25e4..d4c003bacaf1415bca9013e1d6ff037f535b4758 100644 (file)
@@ -83,7 +83,7 @@ exists_console (const device& dev)
     default:
       if (dev.get_minor () < MAX_CONS_DEV)
        {
-         unsigned long bitmask = fhandler_console::console_unit (-1);
+         unsigned long bitmask = fhandler_console::console_unit (CONS_LIST_USED);
          return !!(bitmask & (1UL << dev.get_minor ()));
        }
       return false;
index be54346fbe2ce6bc94cfed4473652c6209dd0774..a86e5015f28ee6266eb5f23a75aa0540ef654646 100644 (file)
@@ -79,7 +79,7 @@ exists_console (const device& dev)
     default:
       if (dev.get_minor () < MAX_CONS_DEV)
        {
-         unsigned long bitmask = fhandler_console::console_unit (-1);
+         unsigned long bitmask = fhandler_console::console_unit (CONS_LIST_USED);
          return !!(bitmask & (1UL << dev.get_minor ()));
        }
       return false;
index 66b4905f466b4794675897afd3f80c07a1a4d0f8..c16ca3962cdd3a49ae26751b04e0c94d4708daae 100644 (file)
@@ -253,12 +253,10 @@ fhandler_console::enum_windows (HWND hw, LPARAM lp)
 }
 
 fhandler_console::console_unit::console_unit (int n0):
-  n (n0), bitmask (0)
+  n (n0), bitmask (0), shared_console_info (NULL)
 {
   EnumWindows (fhandler_console::enum_windows, (LPARAM) this);
-  if (n < 0)
-    n = (_minor_t) ffsl (~bitmask) - 1;
-  if (n < 0)
+  if (n0 == CONS_SCAN_UNUSED && (n = ffsl (~bitmask) - 1) < 0)
     api_fatal (sizeof (bitmask) == 8 ?
               "console device allocation failure - "
               "too many consoles in use, max consoles is 64" :
@@ -674,7 +672,7 @@ fhandler_console::set_unit ()
              ProtectHandleINH (cygheap->console_h);
              if (created)
                {
-                 unit = console_unit (-1);
+                 unit = console_unit (CONS_SCAN_UNUSED);
                  cs->tty_min_state.setntty (DEV_CONS_MAJOR, unit);
                }
              else
index a2017f618da612269921da3c869dd7c340be24e8..6ddf3737075d16c68fbb8b3adcd142738a7d96cc 100644 (file)
@@ -2192,6 +2192,8 @@ class dev_console
 };
 
 #define MAX_CONS_DEV (sizeof (unsigned long) * 8)
+#define CONS_SCAN_UNUSED (-1)
+#define CONS_LIST_USED (-2)
 
 /* This is a input and output console handle */
 class fhandler_console: public fhandler_termios
@@ -2388,9 +2390,8 @@ private:
     unsigned long bitmask;
     console_state *shared_console_info;
   public:
-    operator _minor_t () const {return n;}
     operator console_state * () const {return shared_console_info;}
-    operator unsigned long () const {return bitmask;}
+    operator unsigned long () const {return n == CONS_LIST_USED ? bitmask : n;}
     console_unit (int);
     friend BOOL CALLBACK fhandler_console::enum_windows (HWND, LPARAM);
   };
This page took 0.045798 seconds and 5 git commands to generate.