mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-28 23:38:49 +00:00
Attempt at raw drive access for linux / osx, test please :)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2410 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
772e37be9a
commit
5dfbb9438e
6 changed files with 67 additions and 32 deletions
|
@ -30,6 +30,9 @@
|
|||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/cdrom.h>
|
||||
#endif
|
||||
|
||||
#include <fstream>
|
||||
|
@ -72,11 +75,33 @@ bool Exists(const char *filename)
|
|||
bool IsDisk(const char *filename)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
std::string copy = filename;
|
||||
if (copy.size() < 4 && copy.c_str()[1] == ':')
|
||||
if (GetDriveType(filename) == DRIVE_CDROM) // CD_ROM also applies to DVD. Noone has a plain CDROM without DVD anymore so we should be fine.
|
||||
return true;
|
||||
#else
|
||||
// TODO: add linux \ osx
|
||||
struct stat statInfo;
|
||||
if((stat(filename, &statInfo) > -1) && (S_ISCHR(statInfo.st_mode) || S_ISBLK(statInfo.st_mode)))
|
||||
{
|
||||
int fileHandle;
|
||||
// try to open the device
|
||||
fileHandle = open(filename, O_RDONLY | O_NONBLOCK, 0);
|
||||
if (fileHandle >= 0)
|
||||
{
|
||||
cdrom_subchnl cdChannelInfo;
|
||||
cdChannelInfo.cdsc_format = CDROM_MSF;
|
||||
|
||||
if ((ioctl(fileHandle, CDROMSUBCHNL, &cdChannelInfo) == 0) ||
|
||||
(errno == EIO) || (errno == ENOENT) ||
|
||||
(errno == EINVAL)
|
||||
#ifdef __GNUC__
|
||||
|| (errno == ENOMEDIUM)
|
||||
#endif
|
||||
)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
close(fileHandle);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue