Index: src/OFSeekableStream.m ================================================================== --- src/OFSeekableStream.m +++ src/OFSeekableStream.m @@ -31,10 +31,11 @@ selector: _cmd]; } - seekToOffset: (off_t)offset { + [self flushWriteCache]; [self _seekToOffset: offset]; [self freeMemory: cache]; cache = NULL; cache_len = 0; @@ -44,10 +45,11 @@ - (off_t)seekForwardWithOffset: (off_t)offset { off_t ret; + [self flushWriteCache]; ret = [self _seekForwardWithOffset: offset - cache_len]; [self freeMemory: cache]; cache = NULL; cache_len = 0; @@ -55,14 +57,17 @@ return ret; } - (off_t)seekToOffsetRelativeToEnd: (off_t)offset { - off_t ret = [self _seekToOffsetRelativeToEnd: offset]; + off_t ret; + + [self flushWriteCache]; + ret = [self _seekToOffsetRelativeToEnd: offset]; [self freeMemory: cache]; cache = NULL; cache_len = 0; return ret; } @end Index: src/OFStream.m ================================================================== --- src/OFStream.m +++ src/OFStream.m @@ -504,10 +504,13 @@ return self; } - flushWriteCache { + if (wcache == NULL) + return self; + [self _writeNBytes: wcache_len fromBuffer: wcache]; [self freeMemory: wcache]; wcache = NULL;