Issue #10841: set binary mode on files; the parser translates newlines
On Windows, set the binary mode on stdin, stdout, stderr and all io.FileIO objects (to not translate newlines, \r\n <=> \n). The Python parser translates newlines (\r\n => \n).
This commit is contained in:
parent
bdde506116
commit
89e3436606
|
@ -8,6 +8,10 @@ What's New in Python 3.2 Release Candidate 1
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #10841: On Windows, set the binary mode on stdin, stdout, stderr and
|
||||
all io.FileIO objects (to not translate newlines, \r\n <=> \n). The Python
|
||||
parser translates newlines (\r\n => \n).
|
||||
|
||||
- Remove buffer API from stable ABI for now, see #10181.
|
||||
|
||||
- Issue #8651: PyArg_Parse*() functions raise an OverflowError if the file
|
||||
|
|
|
@ -388,6 +388,11 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
|
|||
goto error;
|
||||
}
|
||||
|
||||
#if defined(MS_WINDOWS) || defined(__CYGWIN__)
|
||||
/* don't translate newlines (\r\n <=> \n) */
|
||||
_setmode(self->fd, O_BINARY);
|
||||
#endif
|
||||
|
||||
if (PyObject_SetAttrString((PyObject *)self, "name", nameobj) < 0)
|
||||
goto error;
|
||||
|
||||
|
|
|
@ -527,11 +527,14 @@ Py_Main(int argc, wchar_t **argv)
|
|||
|
||||
stdin_is_interactive = Py_FdIsInteractive(stdin, (char *)0);
|
||||
|
||||
if (Py_UnbufferedStdioFlag) {
|
||||
#if defined(MS_WINDOWS) || defined(__CYGWIN__)
|
||||
_setmode(fileno(stdin), O_BINARY);
|
||||
_setmode(fileno(stdout), O_BINARY);
|
||||
/* don't translate newlines (\r\n <=> \n) */
|
||||
_setmode(fileno(stdin), O_BINARY);
|
||||
_setmode(fileno(stdout), O_BINARY);
|
||||
_setmode(fileno(stderr), O_BINARY);
|
||||
#endif
|
||||
|
||||
if (Py_UnbufferedStdioFlag) {
|
||||
#ifdef HAVE_SETVBUF
|
||||
setvbuf(stdin, (char *)NULL, _IONBF, BUFSIZ);
|
||||
setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ);
|
||||
|
|
|
@ -892,6 +892,13 @@ tok_nextc(register struct tok_state *tok)
|
|||
}
|
||||
if (tok->prompt != NULL) {
|
||||
char *newtok = PyOS_Readline(stdin, stdout, tok->prompt);
|
||||
if (newtok != NULL) {
|
||||
char *translated = translate_newlines(newtok, 0, tok);
|
||||
PyMem_FREE(newtok);
|
||||
if (translated == NULL)
|
||||
return EOF;
|
||||
newtok = translated;
|
||||
}
|
||||
#ifndef PGEN
|
||||
if (tok->encoding && newtok && *newtok) {
|
||||
/* Recode to UTF-8 */
|
||||
|
|
Loading…
Reference in New Issue