diff options
Diffstat (limited to 'winsup/cygwin/dtable.cc')
-rw-r--r-- | winsup/cygwin/dtable.cc | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 9f09c01b6..6430e7523 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -351,7 +351,7 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle) /* Console windows are not kernel objects, so the access mask returned by NtQueryInformationFile is meaningless. CMD always hands down stdin handles as R/O handles, but our tty slave sides are R/W. */ - if (dev == FH_TTY || dev == FH_CONSOLE || dev.get_major () == DEV_TTYS_MAJOR) + if (dev == FH_TTY || iscons_dev (dev) || dev.get_major () == DEV_TTYS_MAJOR) access |= GENERIC_READ | GENERIC_WRITE; else if (NT_SUCCESS (NtQueryInformationFile (handle, &io, &fai, sizeof fai, @@ -460,7 +460,7 @@ fh_alloc (device dev) fh = cnew (fhandler_serial) (); break; case DEV_CONS_MAJOR: - fh = cnew (fhandler_console) (); + fh = cnew (fhandler_console) (dev); break; default: switch ((int) dev) @@ -468,7 +468,7 @@ fh_alloc (device dev) case FH_CONSOLE: case FH_CONIN: case FH_CONOUT: - fh = cnew (fhandler_console) (); + fh = cnew (fhandler_console) (dev); break; case FH_PTYM: fh = cnew (fhandler_pty_master) (); @@ -541,7 +541,7 @@ fh_alloc (device dev) case FH_TTY: { if (iscons_dev (myself->ctty)) - fh = cnew (fhandler_console) (); + fh = cnew (fhandler_console) (dev); else fh = cnew (fhandler_tty_slave) (myself->ctty); break; @@ -564,7 +564,9 @@ build_fh_pc (path_conv& pc, bool set_name) if (!fh) set_errno (EMFILE); - else if (fh->dev () != FH_BAD) + else if (fh->dev () == FH_ERROR) + goto out; + else if (fh->dev () != FH_NADA) fh->set_name (fh->dev ().name); else if (set_name) fh->set_name (pc); @@ -582,6 +584,7 @@ build_fh_pc (path_conv& pc, bool set_name) *cygheap->fdtab.add_archetype () = fh->archetype; } +out: debug_printf ("fh %p", fh); return fh; } |