Daniel C. Sobral wrote:
 
> Garance A Drosihn wrote:
> > 
> > >Undefined behavior means anything goes. On a standard, it means the
> > >behaviour is implementation-defined (which may be undefined or not).

While not disagreeing with what I think Daniel means: at least in the
C Standard itself, "undefined behavior" and "implementation-defined
behavior" are kept carefully separate.  A quote from X3J11's Rationale
document probably addresses the crux of the issue Garance raised,
though:

    Undefined behavior gives the implementor license not to catch 
    certain program errors

> > I am not saying that what freebsd does is wrong.  But Robert
> > said that "[that code is a silly thing], but if I was porting
> > some hairy old C code I'd tend to expect it to work."
> 
> > It seems to me that if the behavior is explicitly undefined
> > then you can NOT expect much of anything when porting.
> 
> He said he would _tend_ to expect it to work. To me, that means the code
> is dubious, but is likely to work.

Garance himself writes, two messages back:

    The thing with ferror is that it will generally "work" after
    the fclose, although the value it returns might not be the 
    right (pre-close) value.

and I really meant something very similar.  Though I'd probably go a
bit further and say -- knowing how ferror is likely to be implemented
-- the most probable result of invoking it after fclose would be a 
failure to detect that an I/O error had occurred.  For "hairy old C
code", that "works" about as much as I'd expect it to.

> > >  And notice that ferror() is not an access to the stream.
> > 
> > In the section I quoted from unix spec, "stream" refers to the
> > variable passed to fclose (though that isn't obvious, because I
> > didn't copy the formatting).  ferror certainly does access that
> > variable.
> 
> MMmmmm. That's a dubious interpretation. The variable is a handle to the
> stream, not the stream itself. Are you sure of the SUS wording?

The original ISO standard defines "FILE" as

    an object capable of recording all the information needed to
    control a stream [7.9.1]

and elsewhere goes on to describe a stream as, for example

    an ordered sequence of characters [7.9.2]

so I think it's fairly clear that a stream is not what (FILE *) 
points at.

I doubt that the SUS would intentionally deviate on such a fundamental
point.

--
Robert Nordier

[EMAIL PROTECTED]
[EMAIL PROTECTED]


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to