17968Smckusick /* Copyright (c) 1982 Regents of the University of California */ 27968Smckusick 3*10565Smckusick static char sccsid[] = "@(#)PFCLOSE.c 1.3 (Berkeley) 01/21/83"; 47968Smckusick 57968Smckusick /* 67968Smckusick * Close a Pascal file deallocating resources as appropriate. 77968Smckusick */ 87968Smckusick 97968Smckusick #include "h00vars.h" 107968Smckusick #include "libpc.h" 117968Smckusick 127968Smckusick struct iorec * 13*10565Smckusick PFCLOSE(filep, lastuse) 147968Smckusick register struct iorec *filep; 15*10565Smckusick bool lastuse; 167968Smckusick { 177968Smckusick if ((filep->funit & FDEF) == 0 && filep->fbuf != NULL) { 187968Smckusick /* 197968Smckusick * Have a previous buffer, close associated file. 207968Smckusick */ 217968Smckusick if (filep->fblk > PREDEF) { 227968Smckusick fflush(filep->fbuf); 237968Smckusick setbuf(filep->fbuf, NULL); 247968Smckusick } 257968Smckusick fclose(filep->fbuf); 267968Smckusick if (ferror(filep->fbuf)) { 277968Smckusick ERROR("%s: Close failed\n", filep->pfname); 287968Smckusick return; 297968Smckusick } 307968Smckusick /* 317968Smckusick * Temporary files are discarded. 327968Smckusick */ 33*10565Smckusick if ((filep->funit & TEMP) != 0 && lastuse && 34*10565Smckusick unlink(filep->pfname)) { 357968Smckusick PERROR("Could not remove ", filep->pfname); 367968Smckusick return; 377968Smckusick } 387968Smckusick } 397968Smckusick _actfile[filep->fblk] = FILNIL; 407968Smckusick return (filep->fchain); 417968Smckusick } 42