Skip to content

Commit 89f05a7

Browse files
committed
fix I/O error when flushing writes to raw files in append mode
if the raw file is appending there is no reason to attempt to rewind it before flushing
1 parent e6a3487 commit 89f05a7

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

Modules/_io/bufferedio.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1897,18 +1897,20 @@ static PyObject *
18971897
_bufferedwriter_flush_unlocked(buffered *self)
18981898
{
18991899
Py_ssize_t written = 0;
1900-
Py_off_t n, rewind;
1900+
Py_off_t n;
19011901

19021902
if (!VALID_WRITE_BUFFER(self) || self->write_pos == self->write_end)
19031903
goto end;
1904-
/* First, rewind */
1905-
rewind = RAW_OFFSET(self) + (self->pos - self->write_pos);
1906-
if (rewind != 0) {
1907-
n = _buffered_raw_seek(self, -rewind, 1);
1908-
if (n < 0) {
1909-
goto error;
1904+
/* First, rewind unless raw file is in append mode */
1905+
if (!self->appending) {
1906+
Py_off_t rewind = RAW_OFFSET(self) + (self->pos - self->write_pos);
1907+
if (rewind != 0) {
1908+
n = _buffered_raw_seek(self, -rewind, 1);
1909+
if (n < 0) {
1910+
goto error;
1911+
}
1912+
self->raw_pos -= rewind;
19101913
}
1911-
self->raw_pos -= rewind;
19121914
}
19131915
while (self->write_pos < self->write_end) {
19141916
n = _bufferedwriter_raw_write(self,

0 commit comments

Comments
 (0)