summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/dtable.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2001-10-08 05:50:33 +0000
committerChristopher Faylor <me@cgf.cx>2001-10-08 05:50:33 +0000
commit97405ef5b07997c805ebd2a6c3ecbe4440c92346 (patch)
treeab8b63cbc031a3deb5aa78c0c1403ad4c769ff93 /winsup/cygwin/dtable.cc
parent2c774ac3f368e61613be8af75eba028d820b5a4b (diff)
downloadcygnal-97405ef5b07997c805ebd2a6c3ecbe4440c92346.tar.gz
cygnal-97405ef5b07997c805ebd2a6c3ecbe4440c92346.tar.bz2
cygnal-97405ef5b07997c805ebd2a6c3ecbe4440c92346.zip
* dtable.cc (dtable::build_fhandler): Allocate correct amount for given
fhandler class. * fhandler.h (fhandler_union): Properly define rather than relying on fhandler_console being "big enough".
Diffstat (limited to 'winsup/cygwin/dtable.cc')
-rw-r--r--winsup/cygwin/dtable.cc38
1 files changed, 19 insertions, 19 deletions
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc
index be60d11c0..faca5356b 100644
--- a/winsup/cygwin/dtable.cc
+++ b/winsup/cygwin/dtable.cc
@@ -255,73 +255,73 @@ dtable::build_fhandler_from_name (int fd, const char *name, HANDLE handle,
return fh;
}
+#define cnew(name) new ((void *) ccalloc (HEAP_FHANDLER, 1, sizeof (name))) name
fhandler_base *
dtable::build_fhandler (int fd, DWORD dev, const char *name, int unit)
{
fhandler_base *fh;
- void *buf = ccalloc (HEAP_FHANDLER, 1, sizeof (fhandler_union) + 100);
dev &= FH_DEVMASK;
switch (dev)
{
case FH_TTYM:
- fh = new (buf) fhandler_tty_master (name, unit);
+ fh = cnew (fhandler_tty_master) (name, unit);
break;
case FH_CONSOLE:
case FH_CONIN:
case FH_CONOUT:
- fh = new (buf) fhandler_console (name);
+ fh = cnew (fhandler_console) (name);
inc_console_fds ();
break;
case FH_PTYM:
- fh = new (buf) fhandler_pty_master (name);
+ fh = cnew (fhandler_pty_master) (name);
break;
case FH_TTYS:
if (unit < 0)
- fh = new (buf) fhandler_tty_slave (name);
+ fh = cnew (fhandler_tty_slave) (name);
else
- fh = new (buf) fhandler_tty_slave (unit, name);
+ fh = cnew (fhandler_tty_slave) (unit, name);
break;
case FH_WINDOWS:
- fh = new (buf) fhandler_windows (name);
+ fh = cnew (fhandler_windows) (name);
break;
case FH_SERIAL:
- fh = new (buf) fhandler_serial (name, dev, unit);
+ fh = cnew (fhandler_serial) (name, dev, unit);
break;
case FH_PIPE:
case FH_PIPER:
case FH_PIPEW:
- fh = new (buf) fhandler_pipe (name, dev);
+ fh = cnew (fhandler_pipe) (name, dev);
break;
case FH_SOCKET:
- fh = new (buf) fhandler_socket (name);
+ fh = cnew (fhandler_socket) (name);
break;
case FH_DISK:
- fh = new (buf) fhandler_disk_file (NULL);
+ fh = cnew (fhandler_disk_file) (NULL);
break;
case FH_FLOPPY:
- fh = new (buf) fhandler_dev_floppy (name, unit);
+ fh = cnew (fhandler_dev_floppy) (name, unit);
break;
case FH_TAPE:
- fh = new (buf) fhandler_dev_tape (name, unit);
+ fh = cnew (fhandler_dev_tape) (name, unit);
break;
case FH_NULL:
- fh = new (buf) fhandler_dev_null (name);
+ fh = cnew (fhandler_dev_null) (name);
break;
case FH_ZERO:
- fh = new (buf) fhandler_dev_zero (name);
+ fh = cnew (fhandler_dev_zero) (name);
break;
case FH_RANDOM:
- fh = new (buf) fhandler_dev_random (name, unit);
+ fh = cnew (fhandler_dev_random) (name, unit);
break;
case FH_MEM:
- fh = new (buf) fhandler_dev_mem (name, unit);
+ fh = cnew (fhandler_dev_mem) (name, unit);
break;
case FH_CLIPBOARD:
- fh = new (buf) fhandler_dev_clipboard (name);
+ fh = cnew (fhandler_dev_clipboard) (name);
break;
case FH_OSS_DSP:
- fh = new (buf) fhandler_dev_dsp (name);
+ fh = cnew (fhandler_dev_dsp) (name);
break;
default:
{