summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/dtable.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/dtable.cc')
-rw-r--r--winsup/cygwin/dtable.cc13
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;
}