mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Fix handling CP/M filenames that contain a forward slash. Fixes #593
This commit is contained in:
@@ -90,7 +90,7 @@ namespace Aaru.Filesystems
|
||||
// Skip first track (first side)
|
||||
for(int m = 0; m < _workingDefinition.side2.sectorIds.Length; m++)
|
||||
_sectorMask[m + _workingDefinition.side1.sectorIds.Length] =
|
||||
(_workingDefinition.side2.sectorIds[m] - _workingDefinition.side2.sectorIds[0]) +
|
||||
_workingDefinition.side2.sectorIds[m] - _workingDefinition.side2.sectorIds[0] +
|
||||
_workingDefinition.side1.sectorIds.Length;
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ namespace Aaru.Filesystems
|
||||
// Skip first track (first side) and first track (second side)
|
||||
for(int m = 0; m < _workingDefinition.side1.sectorIds.Length; m++)
|
||||
_sectorMask[m + _workingDefinition.side1.sectorIds.Length] =
|
||||
(_workingDefinition.side1.sectorIds[m] - _workingDefinition.side1.sectorIds[0]) +
|
||||
_workingDefinition.side1.sectorIds[m] - _workingDefinition.side1.sectorIds[0] +
|
||||
_workingDefinition.side1.sectorIds.Length + _workingDefinition.side2.sectorIds.Length;
|
||||
|
||||
// TODO: Implement CYLINDERS ordering
|
||||
@@ -153,8 +153,8 @@ namespace Aaru.Filesystems
|
||||
for(int p = 0; p <= (int)(partition.End - partition.Start); p++)
|
||||
{
|
||||
byte[] readSector =
|
||||
_device.ReadSector((ulong)((int)partition.Start +
|
||||
((p / _sectorMask.Length) * _sectorMask.Length) +
|
||||
_device.ReadSector((ulong)((int)partition.Start +
|
||||
(p / _sectorMask.Length * _sectorMask.Length) +
|
||||
_sectorMask[p % _sectorMask.Length]));
|
||||
|
||||
if(_workingDefinition.complement)
|
||||
@@ -209,7 +209,7 @@ namespace Aaru.Filesystems
|
||||
AaruConsole.DebugWriteLine("CP/M Plugin", "Reading directory.");
|
||||
|
||||
int dirOff;
|
||||
int dirSectors = ((_dpb.drm + 1) * 32) / _workingDefinition.bytesPerSector;
|
||||
int dirSectors = (_dpb.drm + 1) * 32 / _workingDefinition.bytesPerSector;
|
||||
|
||||
if(_workingDefinition.sofs > 0)
|
||||
dirOff = _workingDefinition.sofs;
|
||||
@@ -292,6 +292,8 @@ namespace Aaru.Filesystems
|
||||
if(!string.IsNullOrEmpty(extension))
|
||||
filename = filename + "." + extension;
|
||||
|
||||
filename = filename.Replace('/', '\u2215');
|
||||
|
||||
int entryNo = ((32 * entry.extentCounter) + entry.extentCounterHigh) / (_dpb.exm + 1);
|
||||
|
||||
// Do we have a stat for the file already?
|
||||
@@ -401,6 +403,8 @@ namespace Aaru.Filesystems
|
||||
if(!string.IsNullOrEmpty(extension))
|
||||
filename = filename + "." + extension;
|
||||
|
||||
filename = filename.Replace('/', '\u2215');
|
||||
|
||||
int entryNo = ((32 * entry.extentCounterHigh) + entry.extentCounter) / (_dpb.exm + 1);
|
||||
|
||||
// Do we have a stat for the file already?
|
||||
@@ -496,6 +500,8 @@ namespace Aaru.Filesystems
|
||||
if(!string.IsNullOrEmpty(extension))
|
||||
filename = filename + "." + extension;
|
||||
|
||||
filename = filename.Replace('/', '\u2215');
|
||||
|
||||
// Do not repeat passwords
|
||||
if(_passwordCache.ContainsKey(filename))
|
||||
_passwordCache.Remove(filename);
|
||||
|
||||
Reference in New Issue
Block a user