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
>      }

Attachment: signature.asc
Description: Digital signature

Reply via email to