* DiscImageChef/Main.cs:

* DiscImageChef/Options.cs:
	* DiscImageChef/DiscImageChef.csproj:
	* DiscImageChef/Commands/DeviceInfo.cs:
	  Added "device-info" command.

	* DiscImageChef.Decoders/SCSI.cs:
	  Correct size miscalculation.
	Do not print "Device claims no standard", generates too much
	  noise.

	* DiscImageChef.Devices/Device/Constructor.cs:
	  Add OS error detection and handling.
	On Linux move to opening O_RDONLY and O_NONBLOCK to allow
	  opening read-only media and removable drives without media.

	* DiscImageChef.Devices/Device/Variables.cs:
	* DiscImageChef.Devices/Device/ScsiCommands.cs:
	  Add OS error detection and handling.

	* DiscImageChef.Devices/DiscImageChef.Devices.csproj:
	* DiscImageChef.Interop/DiscImageChef.Interop.csproj:
	  Downgraded .NET version.
This commit is contained in:
2015-10-13 01:45:07 +01:00
parent 9f545eb8ab
commit 9f0d09b789
14 changed files with 206 additions and 13 deletions

View File

@@ -92,7 +92,8 @@ namespace DiscImageChef.Devices
byte[] cdb = { (byte)Enums.ScsiCommands.Inquiry, 0, 0, 0, 5, 0 };
bool sense;
SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, Enums.ScsiDirection.In, out duration, out sense);
lastError = SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, Enums.ScsiDirection.In, out duration, out sense);
error = lastError != 0;
if (sense)
return true;
@@ -103,7 +104,8 @@ namespace DiscImageChef.Devices
buffer = new byte[pagesLength];
senseBuffer = new byte[32];
SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, Enums.ScsiDirection.In, out duration, out sense);
lastError = SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, Enums.ScsiDirection.In, out duration, out sense);
error = lastError != 0;
return sense;
}
@@ -163,7 +165,8 @@ namespace DiscImageChef.Devices
byte[] cdb = { (byte)Enums.ScsiCommands.Inquiry, 1, page, 0, 5, 0 };
bool sense;
SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, Enums.ScsiDirection.In, out duration, out sense);
lastError = SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, Enums.ScsiDirection.In, out duration, out sense);
error = lastError != 0;
if (sense)
return true;
@@ -174,7 +177,8 @@ namespace DiscImageChef.Devices
buffer = new byte[pagesLength];
senseBuffer = new byte[32];
SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, Enums.ScsiDirection.In, out duration, out sense);
lastError = SendScsiCommand(cdb, ref buffer, out senseBuffer, timeout, Enums.ScsiDirection.In, out duration, out sense);
error = lastError != 0;
return sense;
}