mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Catch and print exceptions from device constructor.
This commit is contained in:
106
DiscImageChef.Core/Error.cs
Normal file
106
DiscImageChef.Core/Error.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
using System;
|
||||
using DiscImageChef.CommonTypes.Interop;
|
||||
using PlatformID = DiscImageChef.CommonTypes.Interop.PlatformID;
|
||||
|
||||
namespace DiscImageChef.Core
|
||||
{
|
||||
public static class Error
|
||||
{
|
||||
public static string Print(int errno)
|
||||
{
|
||||
switch (DetectOS.GetRealPlatformID())
|
||||
{
|
||||
case PlatformID.Win32S:
|
||||
case PlatformID.Win32Windows:
|
||||
case PlatformID.Win32NT:
|
||||
case PlatformID.WinCE:
|
||||
case PlatformID.WindowsPhone:
|
||||
case PlatformID.Xbox:
|
||||
return PrintWin32Error(errno);
|
||||
case PlatformID.Unix:
|
||||
case PlatformID.MacOSX:
|
||||
case PlatformID.iOS:
|
||||
case PlatformID.Linux:
|
||||
case PlatformID.Solaris:
|
||||
case PlatformID.NetBSD:
|
||||
case PlatformID.OpenBSD:
|
||||
case PlatformID.FreeBSD:
|
||||
case PlatformID.DragonFly:
|
||||
case PlatformID.Android:
|
||||
case PlatformID.Tizen:
|
||||
case PlatformID.Hurd:
|
||||
case PlatformID.Haiku:
|
||||
case PlatformID.HPUX:
|
||||
case PlatformID.AIX:
|
||||
case PlatformID.OS400:
|
||||
case PlatformID.IRIX:
|
||||
case PlatformID.Minix:
|
||||
case PlatformID.QNX:
|
||||
case PlatformID.SINIX:
|
||||
case PlatformID.Tru64:
|
||||
case PlatformID.Ultrix:
|
||||
case PlatformID.OpenServer:
|
||||
case PlatformID.UnixWare:
|
||||
case PlatformID.zOS:
|
||||
return PrintUnixError(errno);
|
||||
case PlatformID.Wii:
|
||||
return $"Unknown error code {errno}";
|
||||
case PlatformID.WiiU:
|
||||
return $"Unknown error code {errno}";
|
||||
case PlatformID.PlayStation3:
|
||||
return $"Unknown error code {errno}";
|
||||
case PlatformID.PlayStation4:
|
||||
return $"Unknown error code {errno}";
|
||||
case PlatformID.NonStop:
|
||||
return $"Unknown error code {errno}";
|
||||
case PlatformID.Unknown:
|
||||
return $"Unknown error code {errno}";
|
||||
default:
|
||||
return $"Unknown error code {errno}";
|
||||
}
|
||||
|
||||
throw new Exception("Arrived an unexpected place");
|
||||
}
|
||||
|
||||
private static string PrintUnixError(int errno)
|
||||
{
|
||||
switch (errno)
|
||||
{
|
||||
case 2: // ENOENT
|
||||
case 19: // ENODEV
|
||||
return "The specified device cannot be found.";
|
||||
case 13: // EACCESS
|
||||
return "Not enough permissions to open the device.";
|
||||
case 16: // EBUSY
|
||||
return "The specified device is in use by another process.";
|
||||
case 30: // EROFS
|
||||
return "Cannot open the device in writable mode, as needed by some commands.";
|
||||
default:
|
||||
return $"Unknown error code {errno}";
|
||||
}
|
||||
}
|
||||
|
||||
private static string PrintWin32Error(int errno)
|
||||
{
|
||||
switch (errno)
|
||||
{
|
||||
case 2: // ERROR_FILE_NOT_FOUND
|
||||
case 3: // ERROR_PATH_NOT_FOUND
|
||||
return "The specified device cannot be found.";
|
||||
case 5: // ERROR_ACCESS_DENIED
|
||||
return "Not enough permissions to open the device.";
|
||||
case 19: // ERROR_WRITE_PROTECT
|
||||
return "Cannot open the device in writable mode, as needed by some commands.";
|
||||
case 32: // ERROR_SHARING_VIOLATION
|
||||
case 33: // ERROR_LOCK_VIOLATION
|
||||
case 108: // ERROR_DRIVE_LOCKED
|
||||
case 170: // ERROR_BUSY
|
||||
return "The specified device is in use by another process.";
|
||||
case 130: // ERROR_DIRECT_ACCESS_HANDLE
|
||||
return "Tried to open a file instead of a device.";
|
||||
default:
|
||||
return $"Unknown error code {errno}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user