You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
1.2 KiB
29 lines
1.2 KiB
diff --git glibc-2.17-c758a686/libio/wfileops.c glibc-2.17-c758a686/libio/wfileops.c |
|
index 87d3cdc..877fc1f 100644 |
|
--- glibc-2.17-c758a686/libio/wfileops.c |
|
+++ glibc-2.17-c758a686/libio/wfileops.c |
|
@@ -715,7 +715,7 @@ _IO_wfile_seekoff (fp, offset, dir, mode) |
|
- fp->_wide_data->_IO_write_base) / clen; |
|
else |
|
{ |
|
- enum __codecvt_result status; |
|
+ enum __codecvt_result status = __codecvt_ok; |
|
delta = (fp->_wide_data->_IO_write_ptr |
|
- fp->_wide_data->_IO_write_base); |
|
const wchar_t *write_base = fp->_wide_data->_IO_write_base; |
|
@@ -728,9 +728,12 @@ _IO_wfile_seekoff (fp, offset, dir, mode) |
|
flush buffers for every ftell. */ |
|
do |
|
{ |
|
- /* Ugh, no point trying to avoid the flush. Just do it |
|
- and go back to how it was with the read mode. */ |
|
- if (delta > 0 && new_write_ptr == fp->_IO_buf_end) |
|
+ /* There is not enough space in the buffer to do the entire |
|
+ conversion, so there is no point trying to avoid the |
|
+ buffer flush. Just do it and go back to how it was with |
|
+ the read mode. */ |
|
+ if (status == __codecvt_partial |
|
+ || (delta > 0 && new_write_ptr == fp->_IO_buf_end)) |
|
{ |
|
if (_IO_switch_to_wget_mode (fp)) |
|
return WEOF;
|
|
|