Overview
Artifact ID: | 8761fe60558fdd422b8a3736036f7915cb6dd185 |
---|---|
Ticket: | 0990f53b1a77cacafccaf440d277edeae0cab70a
PNG files in Metakit4 VFSes fail to be read correctly |
User & Date: | rkeene on 2010-10-16 21:13:32 |
Changes
- comment changed to:
Reported by JDC: http://groups.google.com/group/starkit/browse_frm/thread/5827418f4a2b80e7 PNG files read from an mk4vfs can fail to be read. Likely an issue in vfs::zstreamed in tclvfs. It happens on non-KitCreator Tclkits too. <hr /><i>rkeene added on 2010-10-13 15:29:31:</i><br /> <ol> <li> Create mk4vfs <ol> <li><tt>$ mkdir x.vfs</tt></li> <li><tt>$ cp cross.png x.vfs/</tt></li> <li><tt>$ ./tclkit-8.5.9-linux-i686 sdx.kit wrap x</tt></li> <li><tt>1 updates applied</tt></li> </ol> </li> <li> Test reading "cross.png" from the mk4vfs <ol> <li><tt>% vfs::mk4::Mount x x</li></tt> <li><tt>mk4vfs1</li></tt> <li><tt>% cd x</li></tt> <li><tt>% glob *</li></tt> <li><tt>cross.png</li></tt> <li><tt>% set fd <nowiki>[open cross.png]</nowiki></li></tt> <li><tt>mk7</li></tt> <li><tt>% fconfigure $fd -translation binary</li></tt> <li><tt>% set data <nowiki>[read $fd]</nowiki>; puts <nowiki>[string length $data]</nowiki></li></tt> <li><tt>655</li></tt> <li><tt>% binary scan $data H* data_hex</li></tt> <li><tt>1</li></tt> <li><tt>% puts $data_hex</li></tt> <li><tt>89504e470d0a1a0a0000000d49484452</li></tt> <li><tt>000000100000001008060000001ff3ff</li></tt> <li><tt>610000000467414d410000afc837058a</li></tt> <li><tt>e90000001974455874536f6674776172</li></tt> <li><tt>650041646f626520496d616765526561</li></tt> <li><tt>647971c9653c000002214944415438cb</li></tt> <li><tt>9593eb4e135114858989c989cfa05689</li></tt> <li><tt>86c89180c41b425b0628ad0d0826d0fb</li></tt> <li><tt>855ea480b4a5eda44da136ea0f4d7c12</li></tt> <li><tt>9f0b44c5deb0d299763ad3e5ae984a2d</li></tt> <li><tt>25e1c74ece64cefaf6acb5f70c0018b8</li></tt> <li><tt>4cd5d742d7ce3e775f10333a2ade57ec</li></tt> <li><tt>0f72d9ed8dd76c4e432fa02dceeca295</li></tt> <li><tt>ce428b277b20755f80d703613436b6f0</li></tt> <li><tt>ebe5cae7eae2d2bd7f80bf62e4dfa145</li></tt> <li><tt>a525443437b73b10d9bbc6a93b9ad138</li></tt> <li><tt>90cba37d3e365be3e519d39553402acd</li></tt> <li><tt>5a09516bedbe013e7e8296cdb5016804</li></tt> <li><tt>425cf6f8397587b21d03e8bdec0fe078</li></tt> <li><tt>feb95a16e6ae7659d06209a6be8ea99a</li></tt> <li><tt>9801de7f809a4aa31e0c83ba43d98a02</li></tt> <li><tt>d9bd3fe78ac942e259766e88cdc8266b</li></tt> <li><tt>84d6d5667487ecbc05f6f224cc01992c</li></tt> <li><tt>648f0f9539b35a9e9e61fda7701a1693</li></tt> <li><tt>5c5e0d59b2e3f6010e3720a651999dd7</li></tt> <li><tt>4a4681fd7fbf0720393ded5101340dd8</li></tt> <li><tt>9cc08a1dd849926f0b0a1353fc4280e4</li></tt> <li><tt>7073c9e581128e004991842920467628</li></tt> <li><tt>4079d58eb2de88ef63e3fc5c40cdeee2</li></tt> <li><tt>92d30d25b40ed01825870b14965a9c32</li></tt> <li><tt>68278bcb406403b517cb283c7c8cc3a1</li></tt> <li><tt>61de05a0cde2d41d4af015754d40a24f</li></tt> <li><tt>a7b0d4e2a481159e4cb0a3f1476ad564</li></tt> <li><tt>0682219c58ac381a19c5c1ad41de01d0</li></tt> <li><tt>6609359b034a200469d5010a4b2d3ed3</li></tt> <li><tt>7702fb3632c6be0edf577f1a0548d605</li></tt> <li><tt>fc187d80fd1b3aa1cb026d96505d5842</li></tt> <li><tt>c930ad51583d691fde1d625f06efa867</li></tt> <li><tt>c53d2196f446a1f07492f5fb990e74b7</li></tt> <li><tt>d9fef59bc28563bc6cfd0672bba4c7db</li></tt> <li><tt>edbe140000000049454e44ae426082</li></tt> </ol> </li> </ol> <hr /><i>rkeene added on 2010-10-13 15:42:47:</i><br /> It works in the trivial case posted previously, but fails with the following kit: http://code.google.com/p/wubwikit/downloads/detail?name=wub-20100922.kit In the kit: <verbatim> % set fd [open cross.png] mk7 % fconfigure $fd -encoding binary % set data [read $fd]; puts [string length $data] 654 % file stat cross.png x % parray x x(atime) = 1285147347 x(blksize) = 135312827 x(blocks) = 583863729869319636 x(ctime) = 1285147347 x(dev) = -143965300 x(gid) = 0 x(ino) = 0 x(mode) = 33279 x(mtime) = 1285147347 x(nlink) = 1 x(size) = 655 x(type) = file x(uid) = 0 </verbatim> <hr /><i>rkeene added on 2010-10-13 15:45:53:</i><br /> Still not sure where this is failing. <verbatim> % mk::loop x db.dirs!90.files { puts "$x, [mk::get $x name]" } db.dirs!90.files!0, cross.png db.dirs!90.files!1, tick.png db.dirs!90.files!2, tclp.gif % mk::view info db.dirs!90.files name size:I date:I contents:B % mk::get db.dirs!90.files!0 size 655 % string length [mk::get db.dirs!90.files!0 contents] 655 % mk::get db.dirs!90.files!0 -size contents 655 % </verbatim> <hr /><i>rkeene added on 2010-10-13 15:52:42:</i><br /> Oh, wait I did "-encoding binary" in my second test where it should have been "-translation binary". Using "-translation binary" causes it to be read correctly. <verbatim> % set fd [open cross.png r] mk7 % fconfigure $fd -translation binary % set data [read $fd]; puts [string length $data] 655 % binary scan $data H* data_hex 1 </verbatim> <hr /><i>rkeene added on 2010-10-16 21:12:41:</i><br /> The issue only occurs when using <nowiki>[fcopy]</nowiki> and mk4vfs channels without direct mode. Simple test: <verbatim> vfs::mk4::Mount test.mk /TEST set fd [open /TEST/cross.png] fconfigure $fd -translation binary set out [open /dev/null w] set ::fcopy_complete 0 proc fcopy_complete {args} { set ::fcopy_complete 1 } fcopy $fd $out -command fcopy_complete after 3000 update puts "FCOPY: $fcopy_complete" </verbatim>