Paul Mackerras: The enclosed email comes from a Debian user who has a proposed patch for a recently reported bug c.f. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=466034
I'd be pleased if some Tcl-literate folks had a look, since
I'm not a Tcl programmer.
Do you have any comment, Paul?
Thanks,
-Steve
On Sun, Feb 24, 2008 at 02:15:45AM +0300, kostix wrote:
> I'm following the RFA #466481 -- this patch fixes issues reported
> in #466034 and also possible other issues stems from the same kind
> of programming error present in various places of dirdiff.
>
> Please test it for the tasks you do since I have only tested the
> cases reported in #466034 plus making a patch + viewing it in an
> external program.
>
> --- /usr/bin/dirdiff 2005-06-27 08:42:56.000000000 +0400
> +++ ./dirdiff 2008-02-24 02:13:06.000000000 +0300
> @@ -563,7 +563,7 @@
> if {$d1 == $d2} continue
> set any 1
> $base.p.$sub1 add command -label "$d2" \
> - -command "makepatch \"$d1\" \"$d2\""
> + -command [list makepatch $d1 $d2]
> }
> if {$any} {
> $base.p add cascade -label "$d1 ->" -menu $base.p.$sub1
> @@ -579,7 +579,7 @@
> set i 0
> foreach d $dirs {
> if {!$dirreadonly($i)} {
> - $base.t add command -label $d -command "touchfiles \"$d\""
> + $base.t add command -label $d -command [list touchfiles $d]
> }
> incr i
> }
> @@ -677,7 +677,7 @@
> set i 0
> foreach d $dirs {
> .bar.options add checkbutton -label "Read-only $d" \
> - -variable dirreadonly($i) -command "readonlychange $i"
> + -variable dirreadonly($i) -command [list readonlychange $i]
> incr i
> }
>
> @@ -1153,7 +1153,7 @@
> if {$xi != ""} {
> set x [lindex $dirs $xi]
> $diffbut add command -label "Show $x" \
> - -command "showfile \"$x\" \"$selfile\""
> + -command [list showfile $x $selfile]
> }
> } elseif {$numgroups > 1} {
> if {$numgroups > 2} {
> @@ -1163,7 +1163,7 @@
> lappend x [lindex $dirs $i]
> }
> $diffbut add command -label "$numgroups-way diff" \
> - -command "diffn {$x} {$selfile}"
> + -command [list diffn $x $selfile]
> }
> for {set gn 1} {$gn < $numgroups} {incr gn} {
> set yi [lindex $groupelts($gn) 0]
> @@ -1184,7 +1184,7 @@
> set xi [lindex $groupelts($go) 0]
> if {$xi == ""} continue
> set x [lindex $dirs $xi]
> - set cmd "diff2 \"$x\" \"$y\" \"$selfile\""
> + set cmd [list diff2 $x $y $selfile]
> if {$numgroups <= 3} {
> if {$compound_ok} {
> $diffbut add command -label "$x vs. $y" \
> @@ -1283,7 +1283,7 @@
> set cl2 [lindex $bgcolors($ng) $age]
> if {$im2 == "ex"} {set im2 ""}
> set y [lindex $dirs $dst]
> - set cmd "copyselfile \"$src\" \"$dst\" \"$selfile\" 0"
> + set cmd [list copyselfile $src $dst $selfile 0]
> if {$any == 1} {
> if {$compound_ok} {
> $copybut add command -label "$x -> $y" \
> @@ -1346,7 +1346,7 @@
> set im2 [lindex $agecolors($ng) $age]
> set cl2 [lindex $bgcolors($ng) $age]
> set y [lindex $dirs $dst]
> - set cmd "copyselfile \"$src\" \"$dst\" \"$selfile\" 1"
> + set cmd [list copyselfile $src $dst $selfile 1]
> if {$any == 1} {
> if {$compound_ok} {
> $copybut add command -label "$x -> $y" \
> @@ -1392,10 +1392,10 @@
> if {$compound_ok} {
> $copybut add command -label "Remove from $x" \
> -image ex -compound left \
> - -command "removeselfile \"$dst\" \"$selfile\""
> + -command [list removeselfile $dst $selfile]
> } else {
> $copybut add command -label "Remove from $x" \
> - -command "removeselfile \"$dst\" \"$selfile\""
> + -command [list removeselfile $dst $selfile]
> }
> }
> }
> @@ -1415,7 +1415,7 @@
> if {$dirreadonly($d)} continue
> set y [lindex $dirs $d]
> $copybut add command -label "$x -> $y" \
> - -command "copyselfile \"$s\" \"$d\" \"$selfile\" 0"
> + -command [list copyselfile $s $d $selfile 0]
> }
> }
> set needsep 1
> @@ -1429,10 +1429,10 @@
> if {$compound_ok} {
> $copybut add command -label "Remove from $x" \
> -image ex -compound left \
> - -command "removeselfile \"$s\" \"$selfile\""
> + -command [list removeselfile $s $selfile]
> } else {
> $copybut add command -label "Remove from $x" \
> - -command "removeselfile \"$s\" \"$selfile\""
> + -command [list removeselfile $s $selfile]
> }
> }
> }
> @@ -1469,7 +1469,7 @@
>
> # Show the file in an external viewer
> if { [llength $showprogram] > 0} {
> - eval "exec $showprogram \"$fn\" &"
> + exec $showprogram $fn &
> return
> }
> # Or make our own viewer
> @@ -1569,7 +1569,7 @@
> set diffopts "-U $ctxlines $diffiflag $diffwflag $diffbflag $diffBflag
> $diffdflag"
>
> if { [llength $diffprogram] > 0} {
> - eval "exec $diffprogram \"$path1\" \"$path2\" &"
> + exec $diffprogram $path1 $path2 &
> return
> }
> # If we used an external diff program, its options are used. If we
> didn't,
> @@ -1750,7 +1750,7 @@
> if {$gx == $g && !$dirreadonly($k)} {
> set f [lindex $dirs $k]
> $mergebut.m add command -label "update $f" \
> - -command "diffmerge $i \"$f\""
> + -command [list diffmerge $i $f]
> set path [joinname $f $difffile]
> set diffmtime($path) [file mtime $path]
> }
> @@ -1770,7 +1770,7 @@
> if {$gx == $g && !$dirreadonly($k)} {
> set f [lindex $dirs $k]
> $mpatchbut.m add command -label "for $f" \
> - -command "diffmpatch $i \"$f\""
> + -command [list diffmpatch $i $f]
> }
> incr k
> }
> @@ -3424,7 +3424,7 @@
> $w.bar.edit.m add command -label Copy -command "tk_textCopy $w.t"
> $w.bar.edit.m add command -label Paste -command "tk_textPaste $w.t"
> $w.bar.edit.m add command -label Find \
> - -command "difffind :merge:$di:$fi $w.t"
> + -command [list difffind :merge:$di:$fi $w.t]
> pack $w.bar.edit -side left
> frame $w.f -relief sunk -border 2
> entry $w.f.filename
> @@ -3533,7 +3533,7 @@
> $w.bar.edit.m add command -label Copy -command "tk_textCopy $w.t"
> $w.bar.edit.m add command -label Paste -command "tk_textPaste $w.t"
> $w.bar.edit.m add command -label Find \
> - -command "difffind :mpatch:$fi $w.t"
> + -command [list difffind :mpatch:$fi $w.t]
> pack $w.bar.edit -side left
> frame $w.f -relief sunk -border 2
> entry $w.f.filename
> @@ -3993,7 +3993,7 @@
> $w.bar.edit.m add command -label Copy -command "tk_textCopy $w.t"
> $w.bar.edit.m add command -label Paste -command "tk_textPaste $w.t"
> $w.bar.edit.m add command -label Find \
> - -command "difffind :patch:$patchnum $w.t"
> + -command [list difffind :patch:$patchnum $w.t]
> pack $w.bar.edit -side left
> frame $w.f -relief sunk -border 2
> label $w.f.l -text "Filename: "
> @@ -4032,23 +4032,23 @@
> set p1 [joinname $d1 $f]
> set p2 [joinname $d2 $f]
> if {[file exists $p1] && [file exists $p2]} {
> - set fh [open "|diff $contextopt $p1 $p2" r]
> + set fh [open [list |diff $contextopt $p1 $p2] r]
> } elseif {[file exists $p1] && ! [file exists $p2]} {
> - set fh [open "|diff $contextopt $p1 $nullfile" r]
> + set fh [open [list |diff $contextopt $p1 $nullfile] r]
> } elseif {! [file exists $p1] && [file exists $p2]} {
> - set fh [open "|diff $contextopt $nullfile $p2" r]
> + set fh [open [list |diff $contextopt $nullfile $p2] r]
> } else {
> continue
> }
> fconfigure $fh -blocking 0
> - fileevent $fh readable "readpatch $fh $pnum $w $d1 $d2 $i \"$f\""
> + fileevent $fh readable [list readpatch $fh $pnum $w $d1 $d2 $i $f]
> return
> }
> if {[string match ".*" $w]} {
> $w.t delete "end - 1c" end
> } else {
> close $w
> - eval "exec $showprogram \"$patch_outfile\" &"
> + exec $showprogram $patch_outfile &
> # Should we remove the tempfile here? We don't have it if we used
> # the internal viewer
> }
signature.asc
Description: Digital signature

