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