From e0daff1c61e323d2a39dd8241de67082d1f10fd7 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 20 Mar 2011 23:36:35 +0100 Subject: Issue #11395: io.FileIO().write() clamps the data length to 32,767 bytes on Windows if the file is a TTY to workaround a Windows bug. The Windows console returns an error (12: not enough space error) on writing into stdout if stdout mode is binary and the length is greater than 66,000 bytes (or less, depending on heap usage). --- Modules/_io/fileio.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'Modules') diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index f96f2e2ede..1aa5ee992d 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -712,7 +712,14 @@ fileio_write(fileio *self, PyObject *args) errno = 0; len = pbuf.len; #if defined(MS_WIN64) || defined(MS_WINDOWS) - if (len > INT_MAX) + if (len > 32767 && isatty(self->fd)) { + /* Issue #11395: the Windows console returns an error (12: not + enough space error) on writing into stdout if stdout mode is + binary and the length is greater than 66,000 bytes (or less, + depending on heap usage). */ + len = 32767; + } + else if (len > INT_MAX) len = INT_MAX; n = write(self->fd, pbuf.buf, (int)len); #else -- cgit v1.2.1