* 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".
This commit is contained in:
parent
2c774ac3f3
commit
97405ef5b0
|
@ -1,3 +1,10 @@
|
||||||
|
Mon Oct 8 01:47:27 2001 Christopher Faylor <cgf@cygnus.com>
|
||||||
|
|
||||||
|
* 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".
|
||||||
|
|
||||||
Mon Oct 8 00:25:18 2001 Christopher Faylor <cgf@cygnus.com>
|
Mon Oct 8 00:25:18 2001 Christopher Faylor <cgf@cygnus.com>
|
||||||
|
|
||||||
* external.cc (fillout_pinfo): Reset counter whenever we initialize the
|
* external.cc (fillout_pinfo): Reset counter whenever we initialize the
|
||||||
|
|
|
@ -255,73 +255,73 @@ dtable::build_fhandler_from_name (int fd, const char *name, HANDLE handle,
|
||||||
return fh;
|
return fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define cnew(name) new ((void *) ccalloc (HEAP_FHANDLER, 1, sizeof (name))) name
|
||||||
fhandler_base *
|
fhandler_base *
|
||||||
dtable::build_fhandler (int fd, DWORD dev, const char *name, int unit)
|
dtable::build_fhandler (int fd, DWORD dev, const char *name, int unit)
|
||||||
{
|
{
|
||||||
fhandler_base *fh;
|
fhandler_base *fh;
|
||||||
void *buf = ccalloc (HEAP_FHANDLER, 1, sizeof (fhandler_union) + 100);
|
|
||||||
|
|
||||||
dev &= FH_DEVMASK;
|
dev &= FH_DEVMASK;
|
||||||
switch (dev)
|
switch (dev)
|
||||||
{
|
{
|
||||||
case FH_TTYM:
|
case FH_TTYM:
|
||||||
fh = new (buf) fhandler_tty_master (name, unit);
|
fh = cnew (fhandler_tty_master) (name, unit);
|
||||||
break;
|
break;
|
||||||
case FH_CONSOLE:
|
case FH_CONSOLE:
|
||||||
case FH_CONIN:
|
case FH_CONIN:
|
||||||
case FH_CONOUT:
|
case FH_CONOUT:
|
||||||
fh = new (buf) fhandler_console (name);
|
fh = cnew (fhandler_console) (name);
|
||||||
inc_console_fds ();
|
inc_console_fds ();
|
||||||
break;
|
break;
|
||||||
case FH_PTYM:
|
case FH_PTYM:
|
||||||
fh = new (buf) fhandler_pty_master (name);
|
fh = cnew (fhandler_pty_master) (name);
|
||||||
break;
|
break;
|
||||||
case FH_TTYS:
|
case FH_TTYS:
|
||||||
if (unit < 0)
|
if (unit < 0)
|
||||||
fh = new (buf) fhandler_tty_slave (name);
|
fh = cnew (fhandler_tty_slave) (name);
|
||||||
else
|
else
|
||||||
fh = new (buf) fhandler_tty_slave (unit, name);
|
fh = cnew (fhandler_tty_slave) (unit, name);
|
||||||
break;
|
break;
|
||||||
case FH_WINDOWS:
|
case FH_WINDOWS:
|
||||||
fh = new (buf) fhandler_windows (name);
|
fh = cnew (fhandler_windows) (name);
|
||||||
break;
|
break;
|
||||||
case FH_SERIAL:
|
case FH_SERIAL:
|
||||||
fh = new (buf) fhandler_serial (name, dev, unit);
|
fh = cnew (fhandler_serial) (name, dev, unit);
|
||||||
break;
|
break;
|
||||||
case FH_PIPE:
|
case FH_PIPE:
|
||||||
case FH_PIPER:
|
case FH_PIPER:
|
||||||
case FH_PIPEW:
|
case FH_PIPEW:
|
||||||
fh = new (buf) fhandler_pipe (name, dev);
|
fh = cnew (fhandler_pipe) (name, dev);
|
||||||
break;
|
break;
|
||||||
case FH_SOCKET:
|
case FH_SOCKET:
|
||||||
fh = new (buf) fhandler_socket (name);
|
fh = cnew (fhandler_socket) (name);
|
||||||
break;
|
break;
|
||||||
case FH_DISK:
|
case FH_DISK:
|
||||||
fh = new (buf) fhandler_disk_file (NULL);
|
fh = cnew (fhandler_disk_file) (NULL);
|
||||||
break;
|
break;
|
||||||
case FH_FLOPPY:
|
case FH_FLOPPY:
|
||||||
fh = new (buf) fhandler_dev_floppy (name, unit);
|
fh = cnew (fhandler_dev_floppy) (name, unit);
|
||||||
break;
|
break;
|
||||||
case FH_TAPE:
|
case FH_TAPE:
|
||||||
fh = new (buf) fhandler_dev_tape (name, unit);
|
fh = cnew (fhandler_dev_tape) (name, unit);
|
||||||
break;
|
break;
|
||||||
case FH_NULL:
|
case FH_NULL:
|
||||||
fh = new (buf) fhandler_dev_null (name);
|
fh = cnew (fhandler_dev_null) (name);
|
||||||
break;
|
break;
|
||||||
case FH_ZERO:
|
case FH_ZERO:
|
||||||
fh = new (buf) fhandler_dev_zero (name);
|
fh = cnew (fhandler_dev_zero) (name);
|
||||||
break;
|
break;
|
||||||
case FH_RANDOM:
|
case FH_RANDOM:
|
||||||
fh = new (buf) fhandler_dev_random (name, unit);
|
fh = cnew (fhandler_dev_random) (name, unit);
|
||||||
break;
|
break;
|
||||||
case FH_MEM:
|
case FH_MEM:
|
||||||
fh = new (buf) fhandler_dev_mem (name, unit);
|
fh = cnew (fhandler_dev_mem) (name, unit);
|
||||||
break;
|
break;
|
||||||
case FH_CLIPBOARD:
|
case FH_CLIPBOARD:
|
||||||
fh = new (buf) fhandler_dev_clipboard (name);
|
fh = cnew (fhandler_dev_clipboard) (name);
|
||||||
break;
|
break;
|
||||||
case FH_OSS_DSP:
|
case FH_OSS_DSP:
|
||||||
fh = new (buf) fhandler_dev_dsp (name);
|
fh = cnew (fhandler_dev_dsp) (name);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
|
|
@ -1019,18 +1019,31 @@ public:
|
||||||
void fixup_after_exec (HANDLE);
|
void fixup_after_exec (HANDLE);
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* You can't do this */
|
|
||||||
typedef union
|
typedef union
|
||||||
{
|
{
|
||||||
fhandler_normal normal;
|
char base[sizeof(fhandler_base)];
|
||||||
fhandler_dev_null dev_null;
|
char console[sizeof(fhandler_console)];
|
||||||
fhandler bare;
|
char dev_clipboard[sizeof(fhandler_dev_clipboard)];
|
||||||
fhandler_serial tty;
|
char dev_dsp[sizeof(fhandler_dev_dsp)];
|
||||||
|
char dev_floppy[sizeof(fhandler_dev_floppy)];
|
||||||
|
char dev_mem[sizeof(fhandler_dev_mem)];
|
||||||
|
char dev_null[sizeof(fhandler_dev_null)];
|
||||||
|
char dev_random[sizeof(fhandler_dev_random)];
|
||||||
|
char dev_raw[sizeof(fhandler_dev_raw)];
|
||||||
|
char dev_tape[sizeof(fhandler_dev_tape)];
|
||||||
|
char dev_zero[sizeof(fhandler_dev_zero)];
|
||||||
|
char disk_file[sizeof(fhandler_disk_file)];
|
||||||
|
char pipe[sizeof(fhandler_pipe)];
|
||||||
|
char pty_master[sizeof(fhandler_pty_master)];
|
||||||
|
char serial[sizeof(fhandler_serial)];
|
||||||
|
char socket[sizeof(fhandler_socket)];
|
||||||
|
char termios[sizeof(fhandler_termios)];
|
||||||
|
char tty_common[sizeof(fhandler_tty_common)];
|
||||||
|
char tty_master[sizeof(fhandler_tty_master)];
|
||||||
|
char tty_slave[sizeof(fhandler_tty_slave)];
|
||||||
|
char windows[sizeof(fhandler_windows)];
|
||||||
} fhandler_union;
|
} fhandler_union;
|
||||||
#else
|
|
||||||
#define fhandler_union fhandler_console
|
|
||||||
#endif
|
|
||||||
struct select_record
|
struct select_record
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
|
Loading…
Reference in New Issue