1*7968Smckusick /* Copyright (c) 1982 Regents of the University of California */
2*7968Smckusick 
3*7968Smckusick static	char sccsid[] = "@(#)PFCLOSE.c	1.1	(Berkeley)	08/29/82";
4*7968Smckusick 
5*7968Smckusick /*
6*7968Smckusick  * Close a Pascal file deallocating resources as appropriate.
7*7968Smckusick  */
8*7968Smckusick 
9*7968Smckusick #include <stdio.h>
10*7968Smckusick #include "h00vars.h"
11*7968Smckusick #include "libpc.h"
12*7968Smckusick 
13*7968Smckusick struct iorec *
14*7968Smckusick PFCLOSE(filep)
15*7968Smckusick 	register struct iorec *filep;
16*7968Smckusick {
17*7968Smckusick 	fprintf(stderr, "Closing file %s\n", filep->pfname);
18*7968Smckusick 	if ((filep->funit & FDEF) == 0 && filep->fbuf != NULL) {
19*7968Smckusick 		/*
20*7968Smckusick 		 * Have a previous buffer, close associated file.
21*7968Smckusick 		 */
22*7968Smckusick 		if (filep->fblk > PREDEF) {
23*7968Smckusick 			fflush(filep->fbuf);
24*7968Smckusick 			setbuf(filep->fbuf, NULL);
25*7968Smckusick 		}
26*7968Smckusick 		fclose(filep->fbuf);
27*7968Smckusick 		if (ferror(filep->fbuf)) {
28*7968Smckusick 			ERROR("%s: Close failed\n", filep->pfname);
29*7968Smckusick 			return;
30*7968Smckusick 		}
31*7968Smckusick 		/*
32*7968Smckusick 		 * Temporary files are discarded.
33*7968Smckusick 		 */
34*7968Smckusick 		if ((filep->funit & TEMP) != 0 && unlink(filep->pfname)) {
35*7968Smckusick 			PERROR("Could not remove ", filep->pfname);
36*7968Smckusick 			return;
37*7968Smckusick 		}
38*7968Smckusick 	}
39*7968Smckusick 	_actfile[filep->fblk] = FILNIL;
40*7968Smckusick 	return (filep->fchain);
41*7968Smckusick }
42