* fhandler.h (fhandler_dev_raw): Add definition for method
`fixup_after_fork'. * fhandler_raw.cc (fhandler_dev_raw::fhandler_dev_raw): Add `set_need_fixup_after_fork' call. (fhandler_dev_raw::~fhandler_dev_raw): Revert to user space allocation. (fhandler_dev_raw::open): Ditto. (fhandler_dev_raw::dup): Ditto. Reset buffer pointer. (fhandler_dev_raw::fixup_after_fork): New function. * fhandler_tape.cc (fhandler_dev_tape::open): Revert to user space memory allocation. (fhandler_dev_tape::ioctl): Ditto. Change behaviour on MTSETBLK when new size is 1.
This commit is contained in:
@@ -89,7 +89,7 @@ fhandler_dev_tape::open (const char *path, int flags, mode_t)
|
||||
varblkop = get.mt_dsreg == 0;
|
||||
|
||||
if (devbufsiz > 1L)
|
||||
devbuf = (char *) cmalloc (HEAP_BUF, devbufsiz);
|
||||
devbuf = new char [devbufsiz];
|
||||
|
||||
/* The following rewind in position 0 solves a problem which appears
|
||||
* in case of multi volume archives: The last ReadFile on first medium
|
||||
@@ -349,20 +349,22 @@ fhandler_dev_tape::ioctl (unsigned int cmd, void *buf)
|
||||
size = get.mt_maxblksize;
|
||||
ret = NO_ERROR;
|
||||
}
|
||||
char *buf = (char *) cmalloc (HEAP_BUF, size);
|
||||
if (!buf)
|
||||
char *buf = NULL;
|
||||
if (size > 1L && !(buf = new char [size]))
|
||||
{
|
||||
ret = ERROR_OUTOFMEMORY;
|
||||
break;
|
||||
}
|
||||
if (devbuf)
|
||||
if (devbufsiz > 1L && size > 1L)
|
||||
{
|
||||
memcpy(buf,devbuf + devbufstart, devbufend - devbufstart);
|
||||
memcpy(buf, devbuf + devbufstart,
|
||||
devbufend - devbufstart);
|
||||
devbufend -= devbufstart;
|
||||
cfree (devbuf);
|
||||
}
|
||||
else
|
||||
devbufend = 0;
|
||||
if (devbufsiz > 1L)
|
||||
delete [] devbuf;
|
||||
devbufstart = 0;
|
||||
devbuf = buf;
|
||||
devbufsiz = size;
|
||||
|
Reference in New Issue
Block a user