* 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

@@ -37,6 +37,7 @@
// //$Id$
using System;
using Microsoft.Win32.SafeHandles;
using System.Runtime.InteropServices;
namespace DiscImageChef.Devices
{
@@ -50,6 +51,7 @@ namespace DiscImageChef.Devices
{
platformID = Interop.DetectOS.GetRealPlatformID();
Timeout = 15;
error = false;
switch (platformID)
{
@@ -61,15 +63,27 @@ namespace DiscImageChef.Devices
IntPtr.Zero, Windows.FileMode.OpenExisting,
Windows.FileAttributes.Normal, IntPtr.Zero);
throw new NotImplementedException();
//break;
if (((SafeFileHandle)fd).IsInvalid)
{
error = true;
lastError = Marshal.GetLastWin32Error();
}
//throw new NotImplementedException();
break;
}
case Interop.PlatformID.Linux:
{
fd = Linux.Extern.open(devicePath, Linux.FileFlags.ReadWrite);
fd = Linux.Extern.open(devicePath, Linux.FileFlags.Readonly | Linux.FileFlags.NonBlocking);
throw new NotImplementedException();
//break;
if ((int)fd < 0)
{
error = true;
lastError = Marshal.GetLastWin32Error();
}
//throw new NotImplementedException();
break;
}
default:
throw new InvalidOperationException(String.Format("Platform {0} not yet supported.", platformID));