Merged revisions 88530 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r88530 | victor.stinner | 2011-02-23 13:07:37 +0100 (mer., 23 févr. 2011) | 4 lines

  Issue #11272: Fix input() and sys.stdin for Windows newline

  On Windows, input() strips '\r' (and not only '\n'), and sys.stdin uses
  universal newline (replace '\r\n' by '\n').
........
This commit is contained in:
Victor Stinner 2011-02-23 12:10:23 +00:00
parent 9f6cbe09cc
commit 02bfdb3f79
4 changed files with 49 additions and 6 deletions

View file

@ -1621,6 +1621,7 @@ builtin_input(PyObject *self, PyObject *args)
PyObject *stdin_encoding;
char *stdin_encoding_str;
PyObject *result;
size_t len;
stdin_encoding = PyObject_GetAttrString(fin, "encoding");
if (!stdin_encoding)
@ -1685,19 +1686,23 @@ builtin_input(PyObject *self, PyObject *args)
Py_DECREF(stdin_encoding);
return NULL;
}
if (*s == '\0') {
len = strlen(s);
if (len == 0) {
PyErr_SetNone(PyExc_EOFError);
result = NULL;
}
else { /* strip trailing '\n' */
size_t len = strlen(s);
else {
if (len > PY_SSIZE_T_MAX) {
PyErr_SetString(PyExc_OverflowError,
"input: input too long");
result = NULL;
}
else {
result = PyUnicode_Decode(s, len-1, stdin_encoding_str, NULL);
len--; /* strip trailing '\n' */
if (len != 0 && s[len-1] == '\r')
len--; /* strip trailing '\r' */
result = PyUnicode_Decode(s, len, stdin_encoding_str, NULL);
}
}
Py_DECREF(stdin_encoding);