Fix NRE when enumerating archive members to HawkArchiveFileItems
SharpCompress does this for .tar.gz it seems
This commit is contained in:
parent
0fd7154eec
commit
0f21944755
|
@ -39,10 +39,17 @@ namespace BizHawk.Client.Common
|
||||||
entryStream.CopyTo(stream);
|
entryStream.CopyTo(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<HawkArchiveFileItem> Scan()
|
public List<HawkArchiveFileItem>? Scan()
|
||||||
{
|
{
|
||||||
var files = EnumerateArchiveFiles();
|
List<HawkArchiveFileItem> outFiles = new();
|
||||||
return files.Select((e, i) => new HawkArchiveFileItem(e.Key.Replace('\\', '/'), e.Size, i, i)).ToList();
|
var entries = EnumerateArchiveFiles().ToList();
|
||||||
|
for (var i = 0; i < entries.Count; i++)
|
||||||
|
{
|
||||||
|
var entry = entries[i];
|
||||||
|
if (entry.Key == null) return null;
|
||||||
|
outFiles.Add(new HawkArchiveFileItem(entry.Key.Replace('\\', '/'), entry.Size, i, i));
|
||||||
|
}
|
||||||
|
return outFiles;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,11 +102,12 @@ namespace BizHawk.Common
|
||||||
_extractor = DearchivalMethod.Construct(path);
|
_extractor = DearchivalMethod.Construct(path);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_archiveItems = _extractor.Scan();
|
_archiveItems = _extractor.Scan() ?? throw new NullReferenceException();
|
||||||
IsArchive = true;
|
IsArchive = true;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
Console.WriteLine($"Failed to scan file list of {FullPathWithoutMember}");
|
||||||
_archiveItems = null;
|
_archiveItems = null;
|
||||||
_extractor.Dispose();
|
_extractor.Dispose();
|
||||||
_extractor = null;
|
_extractor = null;
|
||||||
|
@ -132,6 +133,12 @@ namespace BizHawk.Common
|
||||||
if (_extractor != null)
|
if (_extractor != null)
|
||||||
{
|
{
|
||||||
var scanResults = _extractor.Scan();
|
var scanResults = _extractor.Scan();
|
||||||
|
if (scanResults == null)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Failed to scan file list of {FullPathWithoutMember}");
|
||||||
|
Exists = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (int i = 0, l = scanResults.Count; i < l; i++)
|
for (int i = 0, l = scanResults.Count; i < l; i++)
|
||||||
{
|
{
|
||||||
if (string.Equals(scanResults[i].Name, autobind, StringComparison.InvariantCultureIgnoreCase))
|
if (string.Equals(scanResults[i].Name, autobind, StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
|
|
@ -9,6 +9,7 @@ namespace BizHawk.Common
|
||||||
{
|
{
|
||||||
void ExtractFile(int index, Stream stream);
|
void ExtractFile(int index, Stream stream);
|
||||||
|
|
||||||
List<HawkArchiveFileItem> Scan();
|
/// <returns><see langword="null"/> on failure</returns>
|
||||||
|
List<HawkArchiveFileItem>? Scan();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue