summaryrefslogtreecommitdiffstats
path: root/newlib/libc/stdio/fseek.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdio/fseek.c')
-rw-r--r--newlib/libc/stdio/fseek.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/newlib/libc/stdio/fseek.c b/newlib/libc/stdio/fseek.c
index 2ad98551c..8b189ba17 100644
--- a/newlib/libc/stdio/fseek.c
+++ b/newlib/libc/stdio/fseek.c
@@ -359,6 +359,13 @@ dumb:
fp->_r = 0;
/* fp->_w = 0; *//* unnecessary (I think...) */
fp->_flags &= ~__SEOF;
+ /* Reset no-optimization flag after successful seek. The
+ no-optimization flag may be set in the case of a read
+ stream that is flushed which by POSIX/SUSv3 standards,
+ means that a corresponding seek must not optimize. The
+ optimization is then allowed if no subsequent flush
+ is performed. */
+ fp->_flags &= ~__SNPT;
_funlockfile (fp);
return 0;
}