From: Pat Thoyts Date: Tue, 15 Sep 2009 14:47:12 GMT Subject: Re: [PATCH 1/2] Work around leftover temporary save file. Message-ID: <87tyz4b6z3.fsf@users.sourceforge.net> In-Reply-To: <81b0412b0909150601j74d40181pc2308f4f63b4817e@mail.gmail.com> Alex Riesen writes: >On Tue, Sep 15, 2009 at 11:26, Pat Thoyts > wrote: >> >> If a file exists and is hidden on Windows the Tcl open command will >> fail as the attributes provided in the CREAT call fail to match those >> of the existing file. Forcing removal of the temporary file before we >> begin solves any problems caused by previous failures to save the >> application settings. An alternative would be to remove the hidden >> attribute before calling 'open'. >> >> Signed-off-by: Pat Thoyts >> --- >>  gitk |    1 + >>  1 files changed, 1 insertions(+), 0 deletions(-) >> >> diff --git a/gitk b/gitk >> index 1306178..a0214b7 100755 >> --- a/gitk >> +++ b/gitk >> @@ -2526,6 +2526,7 @@ proc savestuff {w} { >>     if {$stuffsaved} return >>     if {![winfo viewable .]} return >>     catch { >> +       if {[file exists ~/.gitk-new]} {file delete -force ~/.gitk-new} > >maybe another gitk instance is writing it at exactly same moment >in time? Writing is known to take a few moments. Especially on Windows. no - 'open $file w' is translated into O_WRONLY|O_CREAT|O_TRUNC internally and passed to the win32 layer to get converted to a call to CreateFile with GENERIC_WRITE, CREATE_ALWAYS and FILE_ATTRIBUTE_NORMAL. The file has got FILE_ATTRIBUTE_HIDDEN though and as it exists and our attributes do not match we get failed. 'open $file {O_WRONLY O_TRUNC}' would open it but we'd have to check for non-existence and redo with O_CREAT if it was not already present. See tclWinChan.c:TclpOpenFileChannel. -- Pat Thoyts http://www.patthoyts.tk/ PGP fingerprint 2C 6E 98 07 2C 59 C8 97 10 CE 11 E6 04 E0 B9 DD