Eric Kow <[EMAIL PROTECTED]> writes:

> Applied, thanks!
>
> So, I naively did a gzip < /dev/null > foo and got a non-empty file
> back... but I don't know if that's relevant (?), and Duncan (on IRC)
> says this looks good (although he wonders where those empty bytestrings
> are coming from)

Eric,

two late comments here (note I don't speak Haskell, so I'm using C
notation throughout):

1. I'd second Duncan that your getting a short file back is fine -- you
   still get the .gz structured file container containing filename,
   sizes, modes and such - see RFC1952.

2. gzip </dev/null is not the equivalent of gzwrite(foo, bar, 0). The
   zlib equivalent would rather be opening a file for write and closing
   it right again.

   The actual problem is that there are subtle differences for 0-sized
   writes in the gzwrite() interface as compared to write().
   gzwrite(), as write(), returns the number of bytes successfully
   written. Unlike write() however, gzwrite() uses 0 (rather than EOF
   that is used by write(), and EOF is usually -1) to indicate error.

   So with gzwrite() you cannot distinguish "successfully written 0
   bytes" from "error writing 0 bytes".

   For some reason, some zlib versions appear to trash their internal
   CRC state on the 0-sized write (such as the one on openSUSE 11.0
   i386), while others (such as the one on Ubuntu Hardy or Intrepid,
   i386) don't.

HTH
Matthias

-- 
Matthias Andree
_______________________________________________
darcs-users mailing list
[email protected]
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to