Kaydet (Commit) 78ad6583 authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka

Circumventing a bug in glibc (issue #17976).

Patch by Jaakko Moisio.
üst 15df36bb
...@@ -1804,7 +1804,7 @@ file_write(PyFileObject *f, PyObject *args) ...@@ -1804,7 +1804,7 @@ file_write(PyFileObject *f, PyObject *args)
const char *s; const char *s;
Py_ssize_t n, n2; Py_ssize_t n, n2;
PyObject *encoded = NULL; PyObject *encoded = NULL;
int err = 0; int err_flag = 0, err;
if (f->f_fp == NULL) if (f->f_fp == NULL)
return err_closed(); return err_closed();
...@@ -1850,13 +1850,15 @@ file_write(PyFileObject *f, PyObject *args) ...@@ -1850,13 +1850,15 @@ file_write(PyFileObject *f, PyObject *args)
FILE_BEGIN_ALLOW_THREADS(f) FILE_BEGIN_ALLOW_THREADS(f)
errno = 0; errno = 0;
n2 = fwrite(s, 1, n, f->f_fp); n2 = fwrite(s, 1, n, f->f_fp);
if (n2 != n || ferror(f->f_fp)) if (n2 != n || ferror(f->f_fp)) {
err_flag = 1;
err = errno; err = errno;
}
FILE_END_ALLOW_THREADS(f) FILE_END_ALLOW_THREADS(f)
Py_XDECREF(encoded); Py_XDECREF(encoded);
if (f->f_binary) if (f->f_binary)
PyBuffer_Release(&pbuf); PyBuffer_Release(&pbuf);
if (err) { if (err_flag) {
errno = err; errno = err;
PyErr_SetFromErrno(PyExc_IOError); PyErr_SetFromErrno(PyExc_IOError);
clearerr(f->f_fp); clearerr(f->f_fp);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment