140865Sbostic /*- 2*62094Sbostic * Copyright (c) 1982, 1993 3*62094Sbostic * The Regents of the University of California. All rights reserved. 440865Sbostic * 540865Sbostic * %sccs.include.redist.c% 640865Sbostic */ 77968Smckusick 840865Sbostic #ifndef lint 9*62094Sbostic static char sccsid[] = "@(#)PFCLOSE.c 8.1 (Berkeley) 06/06/93"; 1040865Sbostic #endif /* not lint */ 117968Smckusick 127968Smckusick /* 137968Smckusick * Close a Pascal file deallocating resources as appropriate. 147968Smckusick */ 157968Smckusick 167968Smckusick #include "h00vars.h" 177968Smckusick #include "libpc.h" 187968Smckusick 197968Smckusick struct iorec * PFCLOSE(filep,lastuse)2010565SmckusickPFCLOSE(filep, lastuse) 217968Smckusick register struct iorec *filep; 2210565Smckusick bool lastuse; 237968Smckusick { 247968Smckusick if ((filep->funit & FDEF) == 0 && filep->fbuf != NULL) { 257968Smckusick /* 267968Smckusick * Have a previous buffer, close associated file. 277968Smckusick */ 287968Smckusick if (filep->fblk > PREDEF) { 297968Smckusick fflush(filep->fbuf); 307968Smckusick setbuf(filep->fbuf, NULL); 317968Smckusick } 327968Smckusick fclose(filep->fbuf); 337968Smckusick if (ferror(filep->fbuf)) { 347968Smckusick ERROR("%s: Close failed\n", filep->pfname); 357968Smckusick return; 367968Smckusick } 377968Smckusick /* 387968Smckusick * Temporary files are discarded. 397968Smckusick */ 4010565Smckusick if ((filep->funit & TEMP) != 0 && lastuse && 4110565Smckusick unlink(filep->pfname)) { 427968Smckusick PERROR("Could not remove ", filep->pfname); 437968Smckusick return; 447968Smckusick } 457968Smckusick } 467968Smckusick _actfile[filep->fblk] = FILNIL; 477968Smckusick return (filep->fchain); 487968Smckusick } 49