Added fail safes in compact of WOF incase

This commit is contained in:
cake
2025-10-30 03:11:38 +01:00
parent b3cc41382f
commit bf139c128b

View File

@@ -138,7 +138,7 @@ public sealed class FileCompactor : IDisposable
_compactionCts.Cancel();
try
{
if (!_compactionWorker.Wait(TimeSpan.FromSeconds(5)))
if (!_compactionWorker.Wait(TimeSpan.FromSeconds(5), _compactionCts.Token))
{
_logger.LogDebug("Compaction worker did not shut down within timeout");
}
@@ -463,10 +463,32 @@ public sealed class FileCompactor : IDisposable
private static bool IsWOFCompactedFile(string filePath)
{
uint buf = 8;
_ = WofIsExternalFile(filePath, out int isExtFile, out uint _, out var info, ref buf);
if (isExtFile == 0) return false;
return info.Algorithm == CompressionAlgorithm.XPRESS8K;
try
{
uint buf = (uint)Marshal.SizeOf<WOF_FILE_COMPRESSION_INFO_V1>();
int result = WofIsExternalFile(filePath, out int isExternal, out uint _, out var info, ref buf);
if (result != 0 || isExternal == 0)
return false;
return info.Algorithm == CompressionAlgorithm.XPRESS8K || info.Algorithm == CompressionAlgorithm.XPRESS4K
|| info.Algorithm == CompressionAlgorithm.XPRESS16K || info.Algorithm == CompressionAlgorithm.LZX;
}
catch (DllNotFoundException)
{
// WofUtil.dll not available
return false;
}
catch (EntryPointNotFoundException)
{
// Running under Wine or non-NTFS systems
return false;
}
catch (Exception)
{
// Exception happened
return false;
}
}
private bool IsBtrfsCompressedFile(string path)