Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 20 Nov 2000 12:20:08 -0800 (PST)
From:      Garrett Wollman <wollman@khavrinen.lcs.mit.edu>
To:        freebsd-bugs@FreeBSD.org
Subject:   bin/22965: [PATCH] fix for minor bug in libc/gen/getcap.c
Message-ID:  <200011202020.MAA28872@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/22965; it has been noted by GNATS.

From: Garrett Wollman <wollman@khavrinen.lcs.mit.edu>
To: gad@eclipse.acs.rpi.edu
Cc: FreeBSD-gnats-submit@FreeBSD.ORG
Subject: bin/22965: [PATCH] fix for minor bug in libc/gen/getcap.c
Date: Mon, 20 Nov 2000 15:16:35 -0500 (EST)

 -*- Mode: BDE -*-
 
 <<On Sun, 19 Nov 2000 18:51:26 -0500 (EST), Garance A Drosehn <gad@freefour.acs.rpi.edu> said:
 
 > -static size_t	 topreclen;	/* toprec length */
 > -static char	*toprec;	/* Additional record specified by cgetset() */
 > -static int	 gottoprec;	/* Flag indicating retrieval of toprecord */
 > +static size_t	 topreclen = 0;	/* toprec length */
 > +static char	*toprec = NULL;	/* Additional record specified by cgetset() */
 > +static int	 gottoprec = 0;	/* Flag indicating retrieval of toprecord */
 
 These changes are erroneous, and have the sole effect of moving these
 variables from .bss, where they occupy only virtual space, to .data
 where they waste space on disk.
 
 > -				(void)fclose(pfp);
 > -				if (ferror(pfp)) {
 > +				fcloseres = fclose(pfp);
 > +				pfp = NULL;
 > +				if (fcloseres != 0) {
 
 This also appears to be the Wrong Thing.  The intent of the code seems
 to be to detect whether *reading* failed.  As implemented in FreeBSD,
 fclose() of a read-only file can never fail.  The correct emendation
 would be:
 	
 				haderror = ferror(pfp);
 				fclose(pfp);
 				if (haderror) {
 
 Even thus, this still could clobber errno (although fgetln() does not
 necessarily set it usefully); an even better version might be:
 
 	int savederrno, haderror;
 
 	savederrno = errno;
 	/* ... */
 				haderror = ferror(pfp);
 				if (haderror)
 					savederrno = errno;
 				fclose(pfp);
 				if (haderror) {
 					cgetclose();
 					errno = savederrno;
 					return (-1);
 				}
 
 -GAWollman
 
 --
 Garrett A. Wollman   | O Siem / We are all family / O Siem / We're all the same
 wollman@lcs.mit.edu  | O Siem / The fires of freedom 
 Opinions not those of| Dance in the burning flame
 MIT, LCS, CRS, or NSA|                     - Susan Aglukark and Chad Irschick
 


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




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