WG15 Defect Report Ref: 9945-1-23
Topic: pass through of error conditions


This is an approved interpretation of 9945-1:1990.

.

Last update: 1997-05-20


                                                                9945-1-90 #23

	Classification:  Editorial defect

 _____________________________________________________________________________


	Topic:			pass through of error conditions
	Relevant Sections:	8.2.3.11


Defect Report:
-----------------------

    (Page 191, lines 406-410)
    
    Subclause 8.2.3.11 begins
    
       "If any of the functions above return an error condition,
       the value of errno shall be set to indicate the error
       condition."
    
    Does this mean that it would be legitimate to implement
    getchar(), for example, such that it would never return
    an error indication as long as buffered data were available
    on stdin?
    
    More generally, must each stream-using function recognize an 
    error whenever an underlying function would do so?
    
    This interpretation is important to the assertion writers for
    1003.3.1, because it will determine whether certain assertions
    are extended and/or conditional.
    


WG15 response for ISO/IEC 9945-1:1990 (IEEE Std 1003.1-1990)
--------------------------------------------------
(This interpretation also applies to 13210:1994)

Interpretation Number 11 of ISO/IEC 9945-1-1988/INT, 1992 Edition,
is completely applicable to ISO/IEC 9945-1:1990.  It states:

    Section 8.2.3.11 applies to all functions specified in 8.2.3.1
    through 8.2.3.10 in the following manner:
    
      (1) The functions are required to return error indications for
          those errors specified by the C Standard.
      (2) The functions are allowed, but not required, to return
          error indications for conditions not specified by the C
          Standard (the standard does not specify the value of errno
          in such situations).
      (3) If the functions return an error condition, and if the
          error condition is one that would be detected by the
          underlying function, the functions are required to set errno
          to the value corresponding to that error condition that
          is specified for the underlying function.

Assertion 6 for fflush() (ISO/IEC 13210:1994, subclause
8.1.11.4) is inconsistent with ISO/IEC 9945-1:1990 in that it
requires that fflush() detect an error under conditions where
the C Standard does not require that an error be detected.

It would be legitimate to implement getchar() such that no
errors were returned while buffered data were available
(regardless of the status of the underlying file descriptor)
because there is no occasion to detect a read error while data
is merely being accessed from the buffer.

Rationale for Interpretation:
-----------------------------
Interpretation Number 11 of IEEE 1003.1-1988/INT, 1992
Edition was originally constrained to apply only to IEEE
1003-1-1988 because the interpretations working group thought
that the the then-unpublished ISO/IEC 9945-1:1990 might contain
wording that would create new requirements as to error reporting
for C library interfaces.

Since the changes to 8.2.3.11 between 1003.1-1988 and
9945-1:1990 merely clarify the relevant requirements without
changing them, the already-adopted Interpretation #11 applies to
9945-1:1990 and to 13210:1994.

 _____________________________________________________________________________