internal static void CopyHeaders(CompressionLevel compression, ZipArchive package, DataCopier copier, StorageEnvironmentOptions storageEnvironmentOptions, string basePath) { var success = false; foreach (var headerFileName in HeaderAccessor.HeaderFileNames) { var header = stackalloc FileHeader[1]; if (!storageEnvironmentOptions.ReadHeader(headerFileName, header)) { continue; } success = true; var headerPart = package.CreateEntry(Path.Combine(basePath, headerFileName), compression); Debug.Assert(headerPart != null); using (var headerStream = headerPart.Open()) { copier.ToStream((byte *)header, sizeof(FileHeader), headerStream); } } if (!success) { throw new InvalidDataException($"Failed to read both file headers (headers.one & headers.two) from path: {basePath}, possible corruption."); } }
internal static void CopyHeaders(CompressionLevel compression, ZipArchive package, DataCopier copier, StorageEnvironmentOptions storageEnvironmentOptions) { foreach (var headerFileName in HeaderAccessor.HeaderFileNames) { var header = stackalloc FileHeader[1]; if (!storageEnvironmentOptions.ReadHeader(headerFileName, header)) continue; var headerPart = package.CreateEntry(headerFileName, compression); Debug.Assert(headerPart != null); using (var headerStream = headerPart.Open()) { copier.ToStream((byte*)header, sizeof(FileHeader), headerStream); } } }
internal static void CopyHeaders(CompressionLevel compression, ZipArchive package, DataCopier copier, StorageEnvironmentOptions storageEnvironmentOptions) { foreach (var headerFileName in HeaderAccessor.HeaderFileNames) { var header = stackalloc FileHeader[1]; if (!storageEnvironmentOptions.ReadHeader(headerFileName, header)) { continue; } var headerPart = package.CreateEntry(headerFileName, compression); Debug.Assert(headerPart != null); using (var headerStream = headerPart.Open()) { copier.ToStream((byte *)header, sizeof(FileHeader), headerStream, CancellationToken.None); } } }
public JournalInfo CopyHeaders(CompressionLevel compressionLevel, ZipArchive package, DataCopier copier, StorageEnvironmentOptions envOptions, string basePath) { _locker.EnterReadLock(); //race between reading the headers while modifying them try { var header = stackalloc FileHeader[1]; var success = false; foreach (var headerFileName in HeaderFileNames) { if (envOptions.ReadHeader(headerFileName, header) == false) { continue; } success = true; var headerPart = package.CreateEntry(Path.Combine(basePath, headerFileName), compressionLevel); Debug.Assert(headerPart != null); using (var headerStream = headerPart.Open()) { copier.ToStream((byte *)header, sizeof(FileHeader), headerStream); } } if (!success) { throw new InvalidDataException($"Failed to read both file headers (headers.one & headers.two) from path: {basePath}, possible corruption."); } return(_theHeader->Journal); } finally { _locker.ExitReadLock(); } }