// Write the local file header // TODO: HfsHelperStream.WriteLocalHeader is not yet used and needs checking for HfsFile and HfsOuptutStream usage void WriteLocalHeader(HfsEntry entry, EntryPatchData patchData) { CompressionMethod method = entry.CompressionMethod; bool headerInfoAvailable = true; // How to get this? WriteLEInt(HfsConstants.LocalHeaderSignature); WriteLEShort(entry.Version); WriteLEShort(entry.Flags); WriteLEShort((byte)method); WriteLEInt((int)entry.DosTime); if (headerInfoAvailable == true) { WriteLEInt((int)entry.CompressedSize); WriteLEInt((int)entry.Size); } else { if (patchData != null) { patchData.CrcPatchOffset = stream_.Position; } WriteLEInt(0); // Crc if (patchData != null) { patchData.SizePatchOffset = stream_.Position; } WriteLEInt(0); // Compressed size WriteLEInt(0); // Uncompressed size } byte[] name = HfsConstants.ConvertToArray(entry.Flags, entry.Name); if (name.Length > 0xFFFF) { throw new HfsException("Entry name too long."); } byte[] extra = new byte[0]; WriteLEShort(name.Length); WriteLEShort(extra.Length); if (name.Length > 0) { stream_.Write(name, 0, name.Length); } if (extra.Length > 0) { stream_.Write(extra, 0, extra.Length); } }