View Issue Details

IDProjectCategoryView StatusLast Update
00004011003.1(2008)/Issue 7System Interfacespublic2013-04-16 13:06
Reportereblake Assigned Toajosey  
PrioritynormalSeverityObjectionTypeOmission
Status ClosedResolutionAccepted As Marked 
NameEric Blake
OrganizationRed Hat
User Referenceebb.ferror
Sectionferror
Page Number835
Line Number27871
Interp StatusApproved
Final Accepted Text0000401:0000747
Summary0000401: ferror should not modify errno
DescriptionThe standard states that unless explicitly documented otherwise, the value
of errno is unspecified after a successful function call. However, it is
common to use ferror() to check whether other stream-based functions failed,
and is commonly implemented without modifying errno, therefore it would be
nice to guarantee that errno is unchanged over a successful call, rather
than requiring that applications save errno before ferror() and then rely
on a non-zero result to learn whether the previously saved value is useful.
For consistency, feof() and clearerr() can be given the same treatment.

Note that as an extension, an implementation may guarantee that ferror
will fail and set errno on detection of an invalid stream argument, but
this is already unspecified behavior and does not need further mention
in the standard. There is still no return value nor errno value reserved
for this case in the standard, so an implementation providing such an
extension would also document that setting errno to 0 prior to ferror()
and observing a change in errno could be used to detect such failures.
Desired ActionAt line 22502 [XSH clearerr DESCRIPTION], add a sentence with CX shading:

<CX>The clearerr() function shall not change the setting of errno if
stream is valid.</CX>

At line 27807 [XSH feof DESCRIPTION], add a sentence with CX shading:

<CX>The feof() function shall not change the setting of errno if
stream is valid.</CX>

At line 27871 [XSH ferror DESCRIPTION], add a sentence with CX shading:

<CX>The ferror() function shall not change the setting of errno if
stream is valid.</CX>



Optional: If this is approved at the same time as 0000389 and 0000399,
then those resolutions should also be simplified accordingly:

For 0000389, change the proposed wording at line 45791 to:
    ... an application wishing to check for error situations should
    call clearerr(stderr) before calling perror(), then if
    ferror(stderr) returns non-zero, the value of errno indicates
    which error occurred.
and delete the first proposed sentence at 45810 (When using ferror()
    to detect whether perror() encountered an error, it is necessary
    to save the value of errno before the call to ferror() since this
    call can change the value of errno.)

For 0000399, change the proposed wording at line 49339 to:
    ... An application wishing to use this method to check for
    error situations should call clearerr(stderr) before calling
    psiginfo() or psignal(), then if ferror(stderr) returns non-zero,
    the value of errno indicates which error occurred.
Tagstc1-2008

Relationships

related to 0000389 Closedajosey Handling errors during a perror() call 
related to 0000399 Closedajosey Handling errors during a psiginfo() or psignal() call 
related to 0000384 Closedajosey the stdarg macros should not modify errno 

Activities

msbrown

2011-04-21 15:40

manager   bugnote:0000747

Interpretation response
------------------------

The standard does not speak to this issue, and as such no conformance distinction can be made between alternative implementations based on this. This is being referred to the sponsor.

Rationale:
-------------
This change should not break any known existing implementations, and will aid application developers.

Notes to the Editor (not part of this interpretation):
-------------------------------------------------------
Use the instructions in the Desired Action section, including the optional sections.

ajosey

2011-06-16 10:16

manager   bugnote:0000846

Interpretation proposed 16 June 2011 for final 30 day review

ajosey

2011-07-29 06:14

manager   bugnote:0000906

The interpretation is now approved.

Issue History

Date Modified Username Field Change
2011-03-31 16:50 eblake New Issue
2011-03-31 16:50 eblake Status New => Under Review
2011-03-31 16:50 eblake Assigned To => ajosey
2011-03-31 16:50 eblake Name => Eric Blake
2011-03-31 16:50 eblake Organization => Red Hat
2011-03-31 16:50 eblake User Reference => ebb.ferror
2011-03-31 16:50 eblake Section => ferror
2011-03-31 16:50 eblake Page Number => 835
2011-03-31 16:50 eblake Line Number => 27871
2011-03-31 16:50 eblake Interp Status => ---
2011-03-31 16:51 eblake Relationship added related to 0000389
2011-03-31 16:51 eblake Relationship added related to 0000399
2011-03-31 16:53 eblake Desired Action Updated
2011-04-21 15:40 msbrown Interp Status --- => Pending
2011-04-21 15:40 msbrown Note Added: 0000747
2011-04-21 15:40 msbrown Type Omission => Enhancement Request
2011-04-21 15:40 msbrown Status Under Review => Interpretation Required
2011-04-21 15:40 msbrown Resolution Open => Future Enhancement
2011-04-21 15:41 msbrown Final Accepted Text => 0000401:0000747
2011-04-21 15:41 msbrown Type Enhancement Request => Omission
2011-04-21 15:41 msbrown Resolution Future Enhancement => Accepted As Marked
2011-04-21 15:43 nick Tag Attached: tc1-2008
2011-06-16 10:16 ajosey Interp Status Pending => Proposed
2011-06-16 10:16 ajosey Note Added: 0000846
2011-07-29 06:14 ajosey Interp Status Proposed => Approved
2011-07-29 06:14 ajosey Note Added: 0000906
2013-04-16 13:06 ajosey Status Interpretation Required => Closed
2016-07-28 15:06 eblake Relationship added related to 0000384