diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 78d4fd7c5..dfb8148bc 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2005-06-30 Corinna Vinschen + + * fhandler.cc (fhandler_base::readv): Use malloc/free instead of alloca. + (fhandler_base::writev): Ditto. + 2005-06-29 Christopher Faylor * cygerrno.h: Make multi-inclusion safe. diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index 2f034007a..e5e08b0b9 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -970,7 +970,7 @@ fhandler_base::readv (const struct iovec *const iov, const int iovcnt, if (!len) return 0; - char *buf = (char *) alloca (tot); + char *buf = (char *) malloc (tot); if (!buf) { @@ -992,6 +992,7 @@ fhandler_base::readv (const struct iovec *const iov, const int iovcnt, nbytes -= frag; } + free (buf); return len; } @@ -1022,7 +1023,7 @@ fhandler_base::writev (const struct iovec *const iov, const int iovcnt, if (tot == 0) return 0; - char *const buf = (char *) alloca (tot); + char *const buf = (char *) malloc (tot); if (!buf) { @@ -1042,8 +1043,9 @@ fhandler_base::writev (const struct iovec *const iov, const int iovcnt, iovptr += 1; nbytes -= frag; } - - return write (buf, tot); + ssize_t ret = write (buf, tot); + free (buf); + return ret; } _off64_t