Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2005-12-07 21:35:29 +0300
committerCorinna Vinschen <corinna@vinschen.de>2005-12-07 21:35:29 +0300
commitbb4e8382c5743298f325c3fe1573cc7492136ccf (patch)
tree1718a3560c7f9deb1175cadaa2d1572d3999faad /winsup/cygwin/fhandler_raw.cc
parent46bcbf8ce072770ea32f97a32debb20cee76e0b2 (diff)
* fhandler_raw.cc (fhandler_dev_raw::ioctl): Fix setting devbuf
when rd_parm is 0 or 1.
Diffstat (limited to 'winsup/cygwin/fhandler_raw.cc')
-rw-r--r--winsup/cygwin/fhandler_raw.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/winsup/cygwin/fhandler_raw.cc b/winsup/cygwin/fhandler_raw.cc
index 479515fe5..3f45703c9 100644
--- a/winsup/cygwin/fhandler_raw.cc
+++ b/winsup/cygwin/fhandler_raw.cc
@@ -161,7 +161,9 @@ fhandler_dev_raw::ioctl (unsigned int cmd, void *buf)
ret = ERROR_INVALID_PARAMETER;
else if (!devbuf || op->rd_parm != devbufsiz)
{
- char *buf = new char [op->rd_parm];
+ char *buf = NULL;
+ if (op->rd_parm > 1L)
+ buf = new char [op->rd_parm];
if (devbufsiz > 1L)
{
memcpy (buf, devbuf + devbufstart, devbufend - devbufstart);
@@ -173,7 +175,7 @@ fhandler_dev_raw::ioctl (unsigned int cmd, void *buf)
devbufstart = 0;
devbuf = buf;
- devbufsiz = op->rd_parm;
+ devbufsiz = op->rd_parm ?: 1L;
}
break;
default:
@@ -187,7 +189,7 @@ fhandler_dev_raw::ioctl (unsigned int cmd, void *buf)
if (!get)
ret = ERROR_INVALID_PARAMETER;
else
- get->bufsiz = devbufsiz ? devbufsiz : 1L;
+ get->bufsiz = devbufsiz ?: 1L;
}
else
return fhandler_base::ioctl (cmd, buf);