Index: ChangeLog
===================================================================
RCS file: /cvsroot/tcllib/tklib/modules/ico/ChangeLog,v
retrieving revision 1.28
diff -w -u -r1.28 ChangeLog
--- ChangeLog	13 Oct 2009 06:42:02 -0000	1.28
+++ ChangeLog	7 Jul 2010 20:38:09 -0000
@@ -1,6 +1,13 @@
+2010-07-07  Andreas Kupries  <andreask@activestate.com>
+
+	* ico.tcl: [Bug 3007168]: Fixed padding used for 24x24 icons.
+	* ico.man: Further allowing writeIcon to create missing files.
+	* pkgIndex.tcl: Bumped version to 1.0.5.
+
 2009-10-12  Aaron Faupell <afaupell@users.sourceforge.net>
 
-	* ico.tcl fix error messages to be more clear and refactor fileext into gettype in the process
+	* ico.tcl fix error messages to be more clear and refactor fileext
+	  into gettype in the process.
 
 2009-05-21  Andreas Kupries  <andreask@activestate.com>
 
Index: ico.man
===================================================================
RCS file: /cvsroot/tcllib/tklib/modules/ico/ico.man,v
retrieving revision 1.19
diff -w -u -r1.19 ico.man
--- ico.man	21 May 2009 16:32:24 -0000	1.19
+++ ico.man	7 Jul 2010 20:38:09 -0000
@@ -1,9 +1,9 @@
 [comment {-*- tcl -*- doctools manpage}]
-[manpage_begin ico n 1.0.4]
+[manpage_begin ico n 1.0.5]
 [moddesc   {Windows ICO handling}]
 [titledesc {Reading and writing windows icons}]
 [require Tcl 8.4]
-[require ico [opt 1.0.4]]
+[require ico [opt 1.0.5]]
 [description]
 
 This package provides functions for reading and writing Windows icons
Index: ico.tcl
===================================================================
RCS file: /cvsroot/tcllib/tklib/modules/ico/ico.tcl,v
retrieving revision 1.30
diff -w -u -r1.30 ico.tcl
--- ico.tcl	13 Oct 2009 06:42:02 -0000	1.30
+++ ico.tcl	7 Jul 2010 20:38:09 -0000
@@ -272,9 +272,10 @@
 #
 proc ::ico::writeIcon {file name bpp data args} {
     parseOpts type $args
-    if {![file exists $file]} {
-        return -code error "couldn't open \"$file\": no such file or directory"
-    }
+    # Bug 3007168 (code is able to create a file if none is present)
+    #if {![file exists $file]} {
+    #    return -code error "couldn't open \"$file\": no such file or directory"
+    #}
     gettype type $file
     if {![llength [info commands writeIcon$type]]} {
 	return -code error "unsupported file format $type"
@@ -651,7 +652,8 @@
     foreach line $colors {
 	set l {}
 	foreach x $line {append l [expr {$x eq ""}]}
-	append l [string repeat 0 [expr {[string length $l] % 32}]]
+	set w [string length $l]
+	append l [string repeat 0 [expr {($w == 24) ? 8 : ($w % 32)}]]
 	foreach {a b c d e f g h} [split $l {}] {
 	    append and [binary format B8 $a$b$c$d$e$f$g$h]
 	}
@@ -770,8 +772,8 @@
 # calculate byte size of an icon.
 # often passed $w twice because $h is double $w in the binary data
 proc ::ico::calcSize {w h bpp {offset 0}} {
-    set s [expr {int(($w*$h) * ($bpp/8.0)) \
-		     + ((($w*$h) + ($h*($w%32)))/8) + $offset}]
+    set s [expr {int(($w*$h) * ($bpp/8.0)) +
+		 ((($w*$h) + ($h*(($w==24) ? 8 : ($w%32))))/8) + $offset}]
     if {$bpp <= 8} { set s [expr {$s + (1 << ($bpp + 2))}] }
     return $s
 }
@@ -796,7 +798,7 @@
     }
 
     set xor  [read $fh [expr {int(($w * $h) * ($bpp / 8.0))}]]
-    set and1 [read $fh [expr {(($w * $h) + ($h * ($w % 32))) / 8}]]
+    set and1 [read $fh [expr {(($w * $h) + ($h * (($w == 24) ? 8 : ($w % 32)))) / 8}]]
 
     set and {}
     set row [expr {((($w - 1) / 32) * 32 + 32) / 8}]
@@ -838,7 +840,7 @@
     set end  [expr {$cnt + int(($w * $h) * ($bpp / 8.0)) - 1}]
     set xor  [string range $data $cnt $end]
     set and1 [string range $data [expr {$end + 1}] \
-		  [expr {$end + ((($w * $h) + ($h * ($w % 32))) / 8) - 1}]]
+		  [expr {$end + ((($w * $h) + ($h * (($w == 24) ? 8 : ($w % 32)))) / 8) - 1}]]
 
     set and {}
     set row [expr {((($w - 1) / 32) * 32 + 32) / 8}]
@@ -1395,4 +1397,4 @@
 interp alias {} ::ico::getRawIconDataICL {} ::ico::getRawIconDataEXE
 interp alias {} ::ico::writeIconICL      {} ::ico::writeIconEXE
 
-package provide ico 1.0.4
+package provide ico 1.0.5
Index: pkgIndex.tcl
===================================================================
RCS file: /cvsroot/tcllib/tklib/modules/ico/pkgIndex.tcl,v
retrieving revision 1.9
diff -w -u -r1.9 pkgIndex.tcl
--- pkgIndex.tcl	21 May 2009 16:32:24 -0000	1.9
+++ pkgIndex.tcl	7 Jul 2010 20:38:09 -0000
@@ -6,4 +6,4 @@
 # RCS: @(#) $Id: pkgIndex.tcl,v 1.9 2009/05/21 16:32:24 andreas_kupries Exp $
 
 package ifneeded ico 0.3.1 [list source [file join $dir ico0.tcl]]
-package ifneeded ico 1.0.4 [list source [file join $dir ico.tcl]]
+package ifneeded ico 1.0.5 [list source [file join $dir ico.tcl]]
