* dtable.cc (fh_oom): Remove.
(fh_calloc): Remove. (cnew): Redefine to handle NULL returns from cmalloc. (build_fh_name): Accommodate new definition of cnew. Remove unneeded test for fh_oom. (fh_alloc): Ditto.
This commit is contained in:
parent
4b626add7e
commit
3d938be6c5
@ -1,3 +1,12 @@
|
|||||||
|
2011-06-30 Ryan Johnson <ryan.johnson@cs.utoronto.ca>
|
||||||
|
|
||||||
|
* dtable.cc (fh_oom): Remove.
|
||||||
|
(fh_calloc): Remove.
|
||||||
|
(cnew): Redefine to handle NULL returns from cmalloc.
|
||||||
|
(build_fh_name): Accommodate new definition of cnew. Remove unneeded
|
||||||
|
test for fh_oom.
|
||||||
|
(fh_alloc): Ditto.
|
||||||
|
|
||||||
2011-06-30 Corinna Vinschen <corinna@vinschen.de>
|
2011-06-30 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* fhandler_console.cc (fhandler_console::read): Add comment.
|
* fhandler_console.cc (fhandler_console::read): Add comment.
|
||||||
|
@ -393,17 +393,11 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is a workaround for the fact that the placement new operator
|
#define cnew(name, ...) \
|
||||||
always calls the constructor, even if the placement pointer is NULL. */
|
({ \
|
||||||
static fhandler_union fh_oom;
|
void* ptr = (void*) ccalloc (HEAP_FHANDLER, 1, sizeof (name)); \
|
||||||
static void *
|
ptr? new(ptr) name(__VA_ARGS__) : NULL; \
|
||||||
fh_calloc (size_t size)
|
})
|
||||||
{
|
|
||||||
void *ret = ccalloc (HEAP_FHANDLER, 1, size);
|
|
||||||
return ret ?: (void *) &fh_oom;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define cnew(name) new (fh_calloc (sizeof (name))) name
|
|
||||||
|
|
||||||
fhandler_base *
|
fhandler_base *
|
||||||
build_fh_name (const char *name, unsigned opt, suffix_info *si)
|
build_fh_name (const char *name, unsigned opt, suffix_info *si)
|
||||||
@ -411,8 +405,8 @@ build_fh_name (const char *name, unsigned opt, suffix_info *si)
|
|||||||
path_conv pc (name, opt | PC_NULLEMPTY | PC_POSIX, si);
|
path_conv pc (name, opt | PC_NULLEMPTY | PC_POSIX, si);
|
||||||
if (pc.error)
|
if (pc.error)
|
||||||
{
|
{
|
||||||
fhandler_base *fh = cnew (fhandler_nodevice) ();
|
fhandler_base *fh = cnew (fhandler_nodevice);
|
||||||
if (fh != (fhandler_base *) &fh_oom)
|
if (fh)
|
||||||
fh->set_error (pc.error);
|
fh->set_error (pc.error);
|
||||||
set_errno (fh ? pc.error : EMFILE);
|
set_errno (fh ? pc.error : EMFILE);
|
||||||
return fh;
|
return fh;
|
||||||
@ -441,10 +435,10 @@ fh_alloc (device dev)
|
|||||||
switch (dev.get_major ())
|
switch (dev.get_major ())
|
||||||
{
|
{
|
||||||
case DEV_TTYS_MAJOR:
|
case DEV_TTYS_MAJOR:
|
||||||
fh = cnew (fhandler_pty_slave) (dev.get_minor ());
|
fh = cnew (fhandler_pty_slave, dev.get_minor ());
|
||||||
break;
|
break;
|
||||||
case DEV_CYGDRIVE_MAJOR:
|
case DEV_CYGDRIVE_MAJOR:
|
||||||
fh = cnew (fhandler_cygdrive) ();
|
fh = cnew (fhandler_cygdrive);
|
||||||
break;
|
break;
|
||||||
case DEV_FLOPPY_MAJOR:
|
case DEV_FLOPPY_MAJOR:
|
||||||
case DEV_CDROM_MAJOR:
|
case DEV_CDROM_MAJOR:
|
||||||
@ -456,16 +450,16 @@ fh_alloc (device dev)
|
|||||||
case DEV_SD5_MAJOR:
|
case DEV_SD5_MAJOR:
|
||||||
case DEV_SD6_MAJOR:
|
case DEV_SD6_MAJOR:
|
||||||
case DEV_SD7_MAJOR:
|
case DEV_SD7_MAJOR:
|
||||||
fh = cnew (fhandler_dev_floppy) ();
|
fh = cnew (fhandler_dev_floppy);
|
||||||
break;
|
break;
|
||||||
case DEV_TAPE_MAJOR:
|
case DEV_TAPE_MAJOR:
|
||||||
fh = cnew (fhandler_dev_tape) ();
|
fh = cnew (fhandler_dev_tape);
|
||||||
break;
|
break;
|
||||||
case DEV_SERIAL_MAJOR:
|
case DEV_SERIAL_MAJOR:
|
||||||
fh = cnew (fhandler_serial) ();
|
fh = cnew (fhandler_serial);
|
||||||
break;
|
break;
|
||||||
case DEV_CONS_MAJOR:
|
case DEV_CONS_MAJOR:
|
||||||
fh = cnew (fhandler_console) (dev);
|
fh = cnew (fhandler_console, dev);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
switch ((int) dev)
|
switch ((int) dev)
|
||||||
@ -473,21 +467,21 @@ fh_alloc (device dev)
|
|||||||
case FH_CONSOLE:
|
case FH_CONSOLE:
|
||||||
case FH_CONIN:
|
case FH_CONIN:
|
||||||
case FH_CONOUT:
|
case FH_CONOUT:
|
||||||
fh = cnew (fhandler_console) (dev);
|
fh = cnew (fhandler_console, dev);
|
||||||
break;
|
break;
|
||||||
case FH_PTYM:
|
case FH_PTYM:
|
||||||
fh = cnew (fhandler_pty_master) ();
|
fh = cnew (fhandler_pty_master);
|
||||||
break;
|
break;
|
||||||
case FH_WINDOWS:
|
case FH_WINDOWS:
|
||||||
fh = cnew (fhandler_windows) ();
|
fh = cnew (fhandler_windows);
|
||||||
break;
|
break;
|
||||||
case FH_FIFO:
|
case FH_FIFO:
|
||||||
fh = cnew (fhandler_fifo) ();
|
fh = cnew (fhandler_fifo);
|
||||||
break;
|
break;
|
||||||
case FH_PIPE:
|
case FH_PIPE:
|
||||||
case FH_PIPER:
|
case FH_PIPER:
|
||||||
case FH_PIPEW:
|
case FH_PIPEW:
|
||||||
fh = cnew (fhandler_pipe) ();
|
fh = cnew (fhandler_pipe);
|
||||||
break;
|
break;
|
||||||
case FH_TCP:
|
case FH_TCP:
|
||||||
case FH_UDP:
|
case FH_UDP:
|
||||||
@ -495,72 +489,70 @@ fh_alloc (device dev)
|
|||||||
case FH_UNIX:
|
case FH_UNIX:
|
||||||
case FH_STREAM:
|
case FH_STREAM:
|
||||||
case FH_DGRAM:
|
case FH_DGRAM:
|
||||||
fh = cnew (fhandler_socket) ();
|
fh = cnew (fhandler_socket);
|
||||||
break;
|
break;
|
||||||
case FH_FS:
|
case FH_FS:
|
||||||
fh = cnew (fhandler_disk_file) ();
|
fh = cnew (fhandler_disk_file);
|
||||||
break;
|
break;
|
||||||
case FH_NULL:
|
case FH_NULL:
|
||||||
fh = cnew (fhandler_dev_null) ();
|
fh = cnew (fhandler_dev_null);
|
||||||
break;
|
break;
|
||||||
case FH_ZERO:
|
case FH_ZERO:
|
||||||
case FH_FULL:
|
case FH_FULL:
|
||||||
fh = cnew (fhandler_dev_zero) ();
|
fh = cnew (fhandler_dev_zero);
|
||||||
break;
|
break;
|
||||||
case FH_RANDOM:
|
case FH_RANDOM:
|
||||||
case FH_URANDOM:
|
case FH_URANDOM:
|
||||||
fh = cnew (fhandler_dev_random) ();
|
fh = cnew (fhandler_dev_random);
|
||||||
break;
|
break;
|
||||||
case FH_MEM:
|
case FH_MEM:
|
||||||
case FH_PORT:
|
case FH_PORT:
|
||||||
fh = cnew (fhandler_dev_mem) ();
|
fh = cnew (fhandler_dev_mem);
|
||||||
break;
|
break;
|
||||||
case FH_CLIPBOARD:
|
case FH_CLIPBOARD:
|
||||||
fh = cnew (fhandler_dev_clipboard) ();
|
fh = cnew (fhandler_dev_clipboard);
|
||||||
break;
|
break;
|
||||||
case FH_OSS_DSP:
|
case FH_OSS_DSP:
|
||||||
fh = cnew (fhandler_dev_dsp) ();
|
fh = cnew (fhandler_dev_dsp);
|
||||||
break;
|
break;
|
||||||
case FH_PROC:
|
case FH_PROC:
|
||||||
fh = cnew (fhandler_proc) ();
|
fh = cnew (fhandler_proc);
|
||||||
break;
|
break;
|
||||||
case FH_REGISTRY:
|
case FH_REGISTRY:
|
||||||
fh = cnew (fhandler_registry) ();
|
fh = cnew (fhandler_registry);
|
||||||
break;
|
break;
|
||||||
case FH_PROCESS:
|
case FH_PROCESS:
|
||||||
case FH_PROCESSFD:
|
case FH_PROCESSFD:
|
||||||
fh = cnew (fhandler_process) ();
|
fh = cnew (fhandler_process);
|
||||||
break;
|
break;
|
||||||
case FH_PROCNET:
|
case FH_PROCNET:
|
||||||
fh = cnew (fhandler_procnet) ();
|
fh = cnew (fhandler_procnet);
|
||||||
break;
|
break;
|
||||||
case FH_PROCSYS:
|
case FH_PROCSYS:
|
||||||
fh = cnew (fhandler_procsys) ();
|
fh = cnew (fhandler_procsys);
|
||||||
break;
|
break;
|
||||||
case FH_PROCSYSVIPC:
|
case FH_PROCSYSVIPC:
|
||||||
fh = cnew (fhandler_procsysvipc) ();
|
fh = cnew (fhandler_procsysvipc);
|
||||||
break;
|
break;
|
||||||
case FH_NETDRIVE:
|
case FH_NETDRIVE:
|
||||||
fh = cnew (fhandler_netdrive) ();
|
fh = cnew (fhandler_netdrive);
|
||||||
break;
|
break;
|
||||||
case FH_TTY:
|
case FH_TTY:
|
||||||
{
|
{
|
||||||
if (iscons_dev (myself->ctty))
|
if (iscons_dev (myself->ctty))
|
||||||
fh = cnew (fhandler_console) (dev);
|
fh = cnew (fhandler_console, dev);
|
||||||
else
|
else
|
||||||
fh = cnew (fhandler_pty_slave) (myself->ctty);
|
fh = cnew (fhandler_pty_slave, myself->ctty);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FH_KMSG:
|
case FH_KMSG:
|
||||||
fh = cnew (fhandler_mailslot) ();
|
fh = cnew (fhandler_mailslot);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fh == fh_unset)
|
if (fh == fh_unset)
|
||||||
fh = cnew (fhandler_nodevice) ();
|
fh = cnew (fhandler_nodevice);
|
||||||
if (fh == (fhandler_base *) &fh_oom)
|
|
||||||
fh = NULL;
|
|
||||||
return fh;
|
return fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user