diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2000-10-31 22:20:59 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2000-10-31 22:20:59 +0000 |
commit | 7cccedf8dead27e59bbe11c37622b260f6699e1f (patch) | |
tree | d754ddb4c85c47da6a99a18139138ddaa296029a /winsup/cygwin/fhandler_tape.cc | |
parent | 8e32a18e796dc9f8a0f92b720cf12aa1bf9dc5b5 (diff) | |
download | cygnal-7cccedf8dead27e59bbe11c37622b260f6699e1f.tar.gz cygnal-7cccedf8dead27e59bbe11c37622b260f6699e1f.tar.bz2 cygnal-7cccedf8dead27e59bbe11c37622b260f6699e1f.zip |
* 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.
Diffstat (limited to 'winsup/cygwin/fhandler_tape.cc')
-rw-r--r-- | winsup/cygwin/fhandler_tape.cc | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/winsup/cygwin/fhandler_tape.cc b/winsup/cygwin/fhandler_tape.cc index 1dd15e577..d1c2c8572 100644 --- a/winsup/cygwin/fhandler_tape.cc +++ b/winsup/cygwin/fhandler_tape.cc @@ -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; |