From 1c0858f473bf57e8a89c652939f04e6886fef863 Mon Sep 17 00:00:00 2001 From: Nick Briggs Date: Sat, 16 Sep 2023 09:28:14 -0700 Subject: [PATCH] Improve check for closed stream in \UFSCloseFile. Check if the (STREAM ACCESS) bits are NIL, indicating a closed stream, and if so do not attempt to close the file again --- sources/UFS | 85 +++++++++++++++++++++++++++++++---------------- sources/UFS.LCOM | Bin 36959 -> 36882 bytes 2 files changed, 56 insertions(+), 29 deletions(-) diff --git a/sources/UFS b/sources/UFS index 9097604b9..a7455a021 100644 --- a/sources/UFS +++ b/sources/UFS @@ -1,14 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "29-Mar-2022 11:29:33" {DSK}kaplan>Local>medley3.5>my-medley>sources>UFS.;32 78036 +(FILECREATED "16-Sep-2023 09:22:55" {DSK}briggs>Projects>medley>sources>UFS.;2 78813 - :PREVIOUS-DATE "28-Mar-2022 22:09:43" -{DSK}kaplan>Local>medley3.5>my-medley>sources>UFS.;31) + :EDIT-BY "briggs" + :CHANGES-TO (FNS \UFSCloseFile) + + :PREVIOUS-DATE "29-Mar-2022 11:29:33" {DSK}briggs>Projects>medley>sources>UFS.;1) -(* ; " -Copyright (c) 1988-1995, 2000, 2021-2022 by Venue & Xerox Corporation. -") (PRETTYCOMPRINT UFSCOMS) @@ -291,8 +290,38 @@ Copyright (c) 1988-1995, 2000, 2021-2022 by Venue & Xerox Corporation. ) (\UFSCloseFile -(LAMBDA (STREAMFILE) (* ; "Edited 30-Mar-90 10:39 by nm") (* ; "return stream") (* ;;; "Closes the specified stream.") (* * WITH.MONITOR \UFStopMonitor) (* ;;; "Write out and dispense with buffers for this stream.") (\CLEARMAP STREAMFILE) (PROG ((DEVICE (fetch (STREAM DEVICE) of STREAMFILE)) (CDATE 0) (ERRNO (CREATECELL \FIXP)) (UNIXNAME (fetch (UFSSTREAM UNIXNAME) of STREAMFILE))) (if (NULL UNIXNAME) then (* ; "Already closed! Somebody's trying to close us twice.") (RETURN NIL)) (if (DIRTYABLE STREAMFILE) then (* ; "Open for output") (FDEVOP (QUOTE TRUNCATEFILE) DEVICE STREAMFILE) (SETQ CDATE (fetch (UFSSTREAM CDATE) of STREAMFILE))) (RETURN (if (\UFSCloseFile-C UNIXNAME (fetch (UFSSTREAM FILEID) of STREAMFILE) CDATE ERRNO) then (replace (UFSSTREAM FILEID) of STREAMFILE with NIL) (replace (UFSSTREAM CDATE) of STREAMFILE with NIL) (* ; "Clear open-file state") STREAMFILE else (\UFSError (fetch (STREAM FULLFILENAME) of STREAMFILE) ERRNO))))) -) + [LAMBDA (STREAMFILE) (* ; "Edited 16-Sep-2023 09:21 by briggs") + (* ; "Edited 30-Mar-90 10:39 by nm") + (* ; "return stream") + +(* ;;; "Closes the specified stream.") + + (* * WITH.MONITOR \UFStopMonitor) + +(* ;;; "Write out and dispense with buffers for this stream.") + + (\CLEARMAP STREAMFILE) + (PROG ((DEVICE (fetch (STREAM DEVICE) of STREAMFILE)) + (CDATE 0) + (ERRNO (CREATECELL \FIXP)) + (UNIXNAME (fetch (UFSSTREAM UNIXNAME) of STREAMFILE))) + (if (OR (NULL UNIXNAME) + (NULL (fetch (STREAM ACCESS) of STREAMFILE))) + then (* ; + "Already closed! Somebody's trying to close us twice.") + (RETURN NIL)) + (if (DIRTYABLE STREAMFILE) + then (* ; "Open for output") + (FDEVOP 'TRUNCATEFILE DEVICE STREAMFILE) + (SETQ CDATE (fetch (UFSSTREAM CDATE) of STREAMFILE))) + (RETURN (if (\UFSCloseFile-C UNIXNAME (fetch (UFSSTREAM FILEID) of STREAMFILE) + CDATE ERRNO) + then (replace (UFSSTREAM FILEID) of STREAMFILE with NIL) + (replace (UFSSTREAM CDATE) of STREAMFILE with NIL) + (* ; "Clear open-file state") + STREAMFILE + else (\UFSError (fetch (STREAM FULLFILENAME) of STREAMFILE) + ERRNO]) (\UFSGetFileName (LAMBDA (FILENAME RECOG DEV) (* ; "Edited 24-Feb-89 16:20 by bvm") (* ;; "Recognize filename, return full name") (\UFS.FULLNAME (\UFS.RECOGNIZE.FILE FILENAME RECOG DEV) DEV T)) @@ -1126,26 +1155,24 @@ update the map") (SETQ PAGES (RESTOREMAP STREAM))) (DELETED (* ; "the file disap (ADDTOVAR LAMA ) ) -(PUTPROPS UFS COPYRIGHT ("Venue & Xerox Corporation" 1988 1989 1990 1991 1992 1993 1994 1995 2000 2021 - 2022)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (8950 10503 (\UFSCreateDevice 8960 . 9325) (\UFS.CREATE.DEVICE 9327 . 10183) ( -\UFSOpenDevice 10185 . 10362) (\UFSCloseDevice 10364 . 10501)) (14766 50339 (\UFSOpenFile 14776 . -18070) (\UFS.OPENP 18072 . 18569) (\UFS.RECOGNIZE.FILE 18571 . 19324) (\UFS.DIRECTORY.NAME 19326 . -20069) (\UFSCloseFile 20071 . 21047) (\UFSGetFileName 21049 . 21248) (\UFSDeleteFile 21250 . 21790) ( -\UFSRenameFile 21792 . 22957) (\UFSReadPages 22959 . 24094) (\UFSWritePages 24096 . 25316) ( -\UFSTruncateFile 25318 . 26815) (\UFSDirectoryNameP 26817 . 27871) (\UFSEventFn 27873 . 28535) ( -\UFSGetFileInfo 28537 . 30819) (\UFS.CREATE.PROPS 30821 . 31174) (\UFSSetFileInfo 31176 . 32405) ( -\UFSGenerateFiles 32407 . 39287) (\UFS.NEXTFILEFN 39289 . 46927) (\UFS.FILEINFOFN 46929 . 48378) ( -\UFS.VALID.PROPP 48380 . 48672) (\UFS.REGISTER.GFS 48674 . 48929) (\UFS.UNREGISTER.GFS 48931 . 49514) -(\UFS.ABORT.DIRECTORY 49516 . 49864) (\UFS.ABORT.CL-DIRECTORY 49866 . 50153) (\UFS.CLEANUP.GFS.TABLE -50155 . 50337)) (50374 57058 (\UFSMakeUnixFormatName 50384 . 51405) (\UFSParseNameString 51407 . 51781 -) (\UFSParse-Directory 51783 . 52324) (\UFS.PARSE.BODY 52326 . 52871) (\UFS.ADJUST.HOST 52873 . 53032) - (\UFS.FULLNAME 53034 . 54242) (\UFS.ADD.HOST.FIELD 54244 . 54604) (\UFS.REMOVE.HOST.FIELD 54606 . -56276) (\UFS.HANDLE.RELATIVEDIRECTORY 56278 . 57056)) (57874 58487 (CHDIR 57884 . 58485)) (58559 59545 - (\DEVICEFILE.EOSERROR 58569 . 59543)) (59618 60855 (\UNVISIBLE.PAGED.REVALIDATEFILELST 59628 . 60473) - (\UNVISIBLE.FLUSH.OPEN.STREAMS 60475 . 60853)) (60888 62514 (\UFSError 60898 . 62512)) (62558 64973 ( -\UFSGetFileType 62568 . 63169) (\UFSSetFileType 63171 . 63768) (\UFSeol 63770 . 64971)) (73620 74744 ( -\UFSGetPrintFileType 73630 . 74042) (\UFSGetFileTypeConfirm 74044 . 74492) (\UFSPrintTypeMenu 74494 . -74742)) (74774 77612 (\UFStoOtherCopyMess 74784 . 76462) (\UFStoOtherRenameMess 76464 . 77610))))) + (FILEMAP (NIL (8909 10462 (\UFSCreateDevice 8919 . 9284) (\UFS.CREATE.DEVICE 9286 . 10142) ( +\UFSOpenDevice 10144 . 10321) (\UFSCloseDevice 10323 . 10460)) (14725 51227 (\UFSOpenFile 14735 . +18029) (\UFS.OPENP 18031 . 18528) (\UFS.RECOGNIZE.FILE 18530 . 19283) (\UFS.DIRECTORY.NAME 19285 . +20028) (\UFSCloseFile 20030 . 21935) (\UFSGetFileName 21937 . 22136) (\UFSDeleteFile 22138 . 22678) ( +\UFSRenameFile 22680 . 23845) (\UFSReadPages 23847 . 24982) (\UFSWritePages 24984 . 26204) ( +\UFSTruncateFile 26206 . 27703) (\UFSDirectoryNameP 27705 . 28759) (\UFSEventFn 28761 . 29423) ( +\UFSGetFileInfo 29425 . 31707) (\UFS.CREATE.PROPS 31709 . 32062) (\UFSSetFileInfo 32064 . 33293) ( +\UFSGenerateFiles 33295 . 40175) (\UFS.NEXTFILEFN 40177 . 47815) (\UFS.FILEINFOFN 47817 . 49266) ( +\UFS.VALID.PROPP 49268 . 49560) (\UFS.REGISTER.GFS 49562 . 49817) (\UFS.UNREGISTER.GFS 49819 . 50402) +(\UFS.ABORT.DIRECTORY 50404 . 50752) (\UFS.ABORT.CL-DIRECTORY 50754 . 51041) (\UFS.CLEANUP.GFS.TABLE +51043 . 51225)) (51262 57946 (\UFSMakeUnixFormatName 51272 . 52293) (\UFSParseNameString 52295 . 52669 +) (\UFSParse-Directory 52671 . 53212) (\UFS.PARSE.BODY 53214 . 53759) (\UFS.ADJUST.HOST 53761 . 53920) + (\UFS.FULLNAME 53922 . 55130) (\UFS.ADD.HOST.FIELD 55132 . 55492) (\UFS.REMOVE.HOST.FIELD 55494 . +57164) (\UFS.HANDLE.RELATIVEDIRECTORY 57166 . 57944)) (58762 59375 (CHDIR 58772 . 59373)) (59447 60433 + (\DEVICEFILE.EOSERROR 59457 . 60431)) (60506 61743 (\UNVISIBLE.PAGED.REVALIDATEFILELST 60516 . 61361) + (\UNVISIBLE.FLUSH.OPEN.STREAMS 61363 . 61741)) (61776 63402 (\UFSError 61786 . 63400)) (63446 65861 ( +\UFSGetFileType 63456 . 64057) (\UFSSetFileType 64059 . 64656) (\UFSeol 64658 . 65859)) (74508 75632 ( +\UFSGetPrintFileType 74518 . 74930) (\UFSGetFileTypeConfirm 74932 . 75380) (\UFSPrintTypeMenu 75382 . +75630)) (75662 78500 (\UFStoOtherCopyMess 75672 . 77350) (\UFStoOtherRenameMess 77352 . 78498))))) STOP diff --git a/sources/UFS.LCOM b/sources/UFS.LCOM index 7b04472082a49cea107ffd41f131dace76dc319b..0fe75a9ec5ac282416171ff630ef002e2a7ecee8 100644 GIT binary patch delta 575 zcma)(%}T>S6oqZ+#^^#&&~|kh5ZXmbW@6i9kYbulw3zmLpW z2VM{SBS3Is@y*lKX6OZBaW@$B`(d#j`1@XW6c(fN*uojfNPsZ;^1>Qb2vrmWyMZ@0 z>+W@q`d+w9q208(dEkehEmB}0LhPpFz;}ymHjALw83_pK7jLYfjFh&^4l^4%GhAi~ zf}hvq{zDH1O~WcsW|dvJv@P;Ju0%l14Wqiwxa`&-ZCCjucm`;_!CK{7lgpMs07P`T z(h1)BB!Dp`I#pE!(q9E0Mi;U9$N1G^>@vDeqS@z}wchlUcn^DX(Nl8gOvUf1EC~Dn z^xPzZY=Wvmd!4z4X)?}1>`jLmjfznh{b2F0+-)$UB5=rfRK}{7{}c=3DNn$*SPNF( WmFPURl#tRH>FF+2J5E%~j`RwFIH3Cg delta 696 zcma))--^>f6vnaaRixmZ?Bc~Cpd_#f$t2k(QGz8+w3?dGG*w{{VmoNqX(mh>c8h3V zzzeZA-nl-*K7e<=hOgpem#ynR@aD&v19QIfeKQ|VJKs+`AD*rODUTYWAPphVb=NRm z)DuAxXLL~&1kZt%AcF8_kUoBUucWMi`I^77$RKQ%dXmsezUh&{lgjb zY|S_jz)i-%bQou;GT>TV%Kj;ZkgGYa`KQu;o8xTbiQJWR-GX$&(-?uSnU|%rZT9TT-oduA zOb7?T6byUwdGFRvSCYGDU-#msmXd6ejN>E){!rk@$@B5>!NUpvJyTpZ81BF`%;*XD tlvR}F%Yv37=#Fi-a5x;Th2DbyKF2Xym@O