Code

git-gui: Always disable the Tcl EOF character when reading
authorShawn O. Pearce <spearce@spearce.org>
Tue, 17 Jul 2007 05:50:10 +0000 (01:50 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Tue, 17 Jul 2007 05:50:10 +0000 (01:50 -0400)
On Windows (which includes Cygwin) Tcl defaults to leaving the EOF
character of input file streams set to the ASCII EOF character, but
if that character were to appear in the data stream then Tcl will
close the channel early.  So we have to disable eofchar on Windows.
Since the default is disabled on all platforms except Windows, we
can just disable it everywhere to prevent any sort of read problem.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
git-gui.sh
lib/blame.tcl
lib/commit.tcl
lib/diff.tcl

index 38084515cba69b1fa1e8c29834f1de562014d44f..d0b75c044c4f0f519ff2f942b1c1b22168c496da 100755 (executable)
@@ -414,6 +414,7 @@ proc _open_stdout_stderr {cmd} {
                        error $err
                }
        }
+       fconfigure $fd -eofchar {}
        return $fd
 }
 
@@ -828,6 +829,7 @@ proc load_message {file} {
                if {[catch {set fd [open $f r]}]} {
                        return 0
                }
+               fconfigure $fd -eofchar {}
                set content [string trim [read $fd]]
                close $fd
                regsub -all -line {[ \r\t]+$} $content {} content
index 4bdb9a27a3dbcc60957f1a4eaed123faf3952bac..1bcb4b471fe0655290beda2133937aff9c314cd0 100644 (file)
@@ -370,6 +370,7 @@ method _load {jump} {
        $w_path conf -text [escape_path $path]
        if {$commit eq {}} {
                set fd [open $path r]
+               fconfigure $fd -eofchar {}
        } else {
                set fd [git_read cat-file blob "$commit:$path"]
        }
index 46a78c158f53372a481061e9a5a6072c40e54e58..0f3b16dfeb05e4451df3204e94106c0c7b53cbc4 100644 (file)
@@ -209,7 +209,7 @@ A good commit message has the following format:
        ui_status {Calling pre-commit hook...}
        set pch_error {}
        set fd_ph [open "| $pchook" r]
-       fconfigure $fd_ph -blocking 0 -translation binary
+       fconfigure $fd_ph -blocking 0 -translation binary -eofchar {}
        fileevent $fd_ph readable \
                [list commit_prehook_wait $fd_ph $curHEAD $msg]
 }
index 9cb9d0604a4905337dc0c57d8d846753a3157c8a..e09e1257e1be299caceb0c6f0074c1b43b566974 100644 (file)
@@ -86,6 +86,7 @@ proc show_diff {path w {lno {}}} {
                set max_sz [expr {128 * 1024}]
                if {[catch {
                                set fd [open $path r]
+                               fconfigure $fd -eofchar {}
                                set content [read $fd $max_sz]
                                close $fd
                                set sz [file size $path]