Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Nov 2000 20:27:56 -0500
From:      Garance A Drosihn <drosih@rpi.edu>
To:        hackers@FreeBSD.org
Subject:   fclose vs ferror (from libc/getcap)
Message-ID:  <p04330101b63e2c0b9192@[128.113.24.47]>

next in thread | raw e-mail | index | archive | help
As mentioned in pr bin/22965, I stumbled across a bug
in libc/gen/getcap.c when compiling it under other
platforms.  The basic problem is some code which does:

  	 (void)fclose(pfp);
  	 if (ferror(pfp)) {
  	 	 ...do stuff...
  	 }

I find it surprising that the above works under FreeBSD.
(not only that, it seems to work OK under several other
OS's too).  The fclose is supposed to throw away the
stream, but the ferror (apparently) still works with
that pointer.

The PR includes a patch for getcap.c (which is just to
use the result from fclose to determine if an error
occurred), but I also wonder if we should do something
so that this combination would ALWAYS fail.  It seems
to me that fclose should clear out whatever fields that
ferror is using for sanity-checking, and ferror should
always return an errno of 'bad parameter', or something
like that.

Or is there some reason that we DO want ferror to work
on streams which have already been closed?
-- 

---
Garance Alistair Drosehn            =   gad@eclipse.acs.rpi.edu
Senior Systems Programmer           or  gad@freebsd.org
Rensselaer Polytechnic Institute    or  drosih@rpi.edu


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?p04330101b63e2c0b9192>