aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/fhandler_tape.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2000-10-31 22:20:59 +0000
committerCorinna Vinschen <corinna@vinschen.de>2000-10-31 22:20:59 +0000
commit7cccedf8dead27e59bbe11c37622b260f6699e1f (patch)
treed754ddb4c85c47da6a99a18139138ddaa296029a /winsup/cygwin/fhandler_tape.cc
parent8e32a18e796dc9f8a0f92b720cf12aa1bf9dc5b5 (diff)
downloadnewlib-7cccedf8dead27e59bbe11c37622b260f6699e1f.zip
newlib-7cccedf8dead27e59bbe11c37622b260f6699e1f.tar.gz
newlib-7cccedf8dead27e59bbe11c37622b260f6699e1f.tar.bz2
* 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.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/winsup/cygwin/fhandler_tape.cc b/winsup/cygwin/fhandler_tape.cc
index 1dd15e5..d1c2c85 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;