Bug 507054

Summary: fsetpos/fseek broken for wide-oriented streams
Product: [Fedora] Fedora Reporter: Watanabe, Yuki <magicant.starmen>
Component: glibcAssignee: Andreas Schwab <schwab>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: low    
Version: 11CC: drepper, jakub, pmuller, schwab
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2009-09-07 13:36:49 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 516995    
Attachments:
Description Flags
a test case none

Description Watanabe, Yuki 2009-06-20 09:12:14 UTC
Created attachment 348738 [details]
a test case

Description of problem:
The fsetpos and fseek functions does not work for wide-oriented streams.
They leave the file position at the wrong place or cause a segfault.

Version-Release number of selected component (if applicable):
glibc-2.10.1-2 (i686)

How reproducible:
Sometimes.

Steps to Reproduce:
Compile and run the attached test case.
  
Actual output of the test case:
1
2
1
1

Expected output of the test case:
1
2
1
3

Additional info:
The fflush function seems to affect the behaviour fsetpos. Doing fflush just before fsetpos sometimes makes fsetpos work correctly, but it does not always help.

Comment 1 Andreas Schwab 2009-08-12 14:15:52 UTC
The bug seems to be connected with this old change, but reverting it breaks other tests.

2002-11-04  Ulrich Drepper  <drepper>

	* libio/wfileops.c (_IO_wfile_seekoff): Don't modify _offset and
	_wide_data->_IO_read_end if adjustment can be made in the current
	buffer.

Comment 2 Andreas Schwab 2009-08-31 12:25:06 UTC
Looks like the equivalent of this change has never been applied to wfileops.c:

2004-12-06  Ulrich Drepper  <drepper>
    
	* libio/fileops.c (_IO_new_file_seekoff): Fix optimization of in-buffer
	seek.  Remove dead code.

Comment 3 Andreas Schwab 2009-09-07 13:36:49 UTC
Fixed in 2.10.90-20.