Skip to content

Commit e8a2d25

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 6718c5c commit e8a2d25

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

Modules/_io/bufferedio.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2059,18 +2059,21 @@ _bufferedwriter_raw_write(buffered *self, char *start, Py_ssize_t len)
20592059
static PyObject *
20602060
_bufferedwriter_flush_unlocked(buffered *self)
20612061
{
2062+
Py_ssize_t written = 0;
20622063
Py_off_t n, rewind;
20632064

20642065
if (!VALID_WRITE_BUFFER(self) || self->write_pos == self->write_end)
20652066
goto end;
2066-
/* First, rewind */
2067-
rewind = RAW_OFFSET(self) + (self->pos - self->write_pos);
2068-
if (rewind != 0) {
2069-
n = _buffered_raw_seek(self, -rewind, 1);
2070-
if (n < 0) {
2071-
goto error;
2067+
/* First, rewind unless raw file is in append mode */
2068+
if (!self->appending) {
2069+
Py_off_t rewind = RAW_OFFSET(self) + (self->pos - self->write_pos);
2070+
if (rewind != 0) {
2071+
n = _buffered_raw_seek(self, -rewind, 1);
2072+
if (n < 0) {
2073+
goto error;
2074+
}
2075+
self->raw_pos -= rewind;
20722076
}
2073-
self->raw_pos -= rewind;
20742077
}
20752078
while (self->write_pos < self->write_end) {
20762079
n = _bufferedwriter_raw_write(self,

0 commit comments

Comments
 (0)