fh.Method = Store
fh.Flags &^= 0x8 // we will not write a data descriptor
+ // Explicitly clear sizes as they have no meaning for directories.
+ fh.CompressedSize = 0
+ fh.CompressedSize64 = 0
+ fh.UncompressedSize = 0
+ fh.UncompressedSize64 = 0
+
ow = dirWriter{}
} else {
fh.Flags |= 0x8 // we will write a data descriptor
type dirWriter struct{}
-func (dirWriter) Write([]byte) (int, error) {
+func (dirWriter) Write(b []byte) (int, error) {
+ if len(b) == 0 {
+ return 0, nil
+ }
return 0, errors.New("zip: write to directory")
}
if err != nil {
t.Fatal(err)
}
+ if _, err := dw.Write(nil); err != nil {
+ t.Errorf("Write(nil) to directory: got %v, want nil", err)
+ }
if _, err := dw.Write([]byte("hello")); err == nil {
- t.Error("Write to directory: got nil error, want non-nil")
+ t.Error(`Write("hello") to directory: got nil error, want non-nil`)
}
}
func TestWriterDirAttributes(t *testing.T) {
var buf bytes.Buffer
w := NewWriter(&buf)
- if _, err := w.Create("dir/"); err != nil {
+ if _, err := w.CreateHeader(&FileHeader{
+ Name: "dir/",
+ Method: Deflate,
+ CompressedSize64: 1234,
+ UncompressedSize64: 5678,
+ }); err != nil {
t.Fatal(err)
}
if err := w.Close(); err != nil {
t.Fatal(err)
}
-
b := buf.Bytes()
var sig [4]byte