summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorPierre Bourdon <delroth@gmail.com>2023-01-17 23:27:59 +0100
committerGitHub <noreply@github.com>2023-01-17 23:27:59 +0100
commit686ac363ba8cbd395f173a4eefd8694c5dab3126 (patch)
tree826c37df60131a4b6377fa486b6552a4d7a5c79f /Source/Core
parentc527aea40d8925f5cf96c1037fde72872436b7ce (diff)
parentdcc10cff11b48856d37623b86f24e272589224b5 (diff)
Merge pull request #11456 from MayImilae/remove-boot-from-dvd
Remove Boot from DVD Backup
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DiscIO/Blob.cpp4
-rw-r--r--Source/Core/DiscIO/CMakeLists.txt2
-rw-r--r--Source/Core/DiscIO/DriveBlob.cpp161
-rw-r--r--Source/Core/DiscIO/DriveBlob.h54
-rw-r--r--Source/Core/DolphinLib.props2
-rw-r--r--Source/Core/DolphinQt/MainWindow.cpp2
-rw-r--r--Source/Core/DolphinQt/MenuBar.cpp15
-rw-r--r--Source/Core/DolphinQt/MenuBar.h2
8 files changed, 0 insertions, 242 deletions
diff --git a/Source/Core/DiscIO/Blob.cpp b/Source/Core/DiscIO/Blob.cpp
index 7c6713e642..b15bcce3de 100644
--- a/Source/Core/DiscIO/Blob.cpp
+++ b/Source/Core/DiscIO/Blob.cpp
@@ -18,7 +18,6 @@
#include "DiscIO/CISOBlob.h"
#include "DiscIO/CompressedBlob.h"
#include "DiscIO/DirectoryBlob.h"
-#include "DiscIO/DriveBlob.h"
#include "DiscIO/FileBlob.h"
#include "DiscIO/NFSBlob.h"
#include "DiscIO/TGCBlob.h"
@@ -215,9 +214,6 @@ u32 SectorReader::ReadChunk(u8* buffer, u64 chunk_num)
std::unique_ptr<BlobReader> CreateBlobReader(const std::string& filename)
{
- if (Common::IsCDROMDevice(filename))
- return DriveReader::Create(filename);
-
File::IOFile file(filename, "rb");
u32 magic;
if (!file.ReadArray(&magic, 1))
diff --git a/Source/Core/DiscIO/CMakeLists.txt b/Source/Core/DiscIO/CMakeLists.txt
index 61790d89d8..157696cefe 100644
--- a/Source/Core/DiscIO/CMakeLists.txt
+++ b/Source/Core/DiscIO/CMakeLists.txt
@@ -13,8 +13,6 @@ add_library(discio
DiscScrubber.h
DiscUtils.cpp
DiscUtils.h
- DriveBlob.cpp
- DriveBlob.h
Enums.cpp
Enums.h
FileBlob.cpp
diff --git a/Source/Core/DiscIO/DriveBlob.cpp b/Source/Core/DiscIO/DriveBlob.cpp
deleted file mode 100644
index 033a6d257c..0000000000
--- a/Source/Core/DiscIO/DriveBlob.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright 2008 Dolphin Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include "DiscIO/DriveBlob.h"
-
-#include <algorithm>
-#include <cstdio>
-#include <cstring>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "Common/CommonTypes.h"
-#include "Common/IOFile.h"
-#include "Common/Logging/Log.h"
-#include "DiscIO/Blob.h"
-
-#ifdef _WIN32
-#include "Common/StringUtil.h"
-#else
-#include <stdio.h> // fileno
-#include <sys/ioctl.h>
-#if defined __linux__
-#include <linux/fs.h> // BLKGETSIZE64
-#elif defined __FreeBSD__
-#include <sys/disk.h> // DIOCGMEDIASIZE
-#elif defined __APPLE__
-#include <sys/disk.h> // DKIOCGETBLOCKCOUNT / DKIOCGETBLOCKSIZE
-#endif
-#endif
-
-namespace DiscIO
-{
-DriveReader::DriveReader(const std::string& drive)
-{
- // 32 sectors is roughly the optimal amount a CD Drive can read in
- // a single IO cycle. Larger values yield no performance improvement
- // and just cause IO stalls from the read delay. Smaller values allow
- // the OS IO and seeking overhead to ourstrip the time actually spent
- // transferring bytes from the media.
- SetChunkSize(32); // 32*2048 = 64KiB
- SetSectorSize(2048);
-#ifdef _WIN32
- auto const path = UTF8ToTStr(std::string("\\\\.\\") + drive);
- m_disc_handle = CreateFile(path.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
- nullptr, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, nullptr);
- if (IsOK())
- {
- // Do a test read to make sure everything is OK, since it seems you can get
- // handles to empty drives.
- DWORD not_used;
- std::vector<u8> buffer(GetSectorSize());
- if (!ReadFile(m_disc_handle, buffer.data(), GetSectorSize(), &not_used, nullptr))
- {
- // OK, something is wrong.
- CloseHandle(m_disc_handle);
- m_disc_handle = INVALID_HANDLE_VALUE;
- }
- }
- if (IsOK())
- {
- // Initialize m_size by querying the volume capacity.
- STORAGE_READ_CAPACITY storage_size;
- storage_size.Version = sizeof(storage_size);
- DWORD bytes = 0;
- DeviceIoControl(m_disc_handle, IOCTL_STORAGE_READ_CAPACITY, nullptr, 0, &storage_size,
- sizeof(storage_size), &bytes, nullptr);
- m_size = bytes ? storage_size.DiskLength.QuadPart : 0;
-
-#ifdef _LOCKDRIVE // Do we want to lock the drive?
- // Lock the compact disc in the CD-ROM drive to prevent accidental
- // removal while reading from it.
- m_lock_cdrom.PreventMediaRemoval = TRUE;
- DeviceIoControl(m_disc_handle, IOCTL_CDROM_MEDIA_REMOVAL, &m_lock_cdrom, sizeof(m_lock_cdrom),
- nullptr, 0, &dwNotUsed, nullptr);
-#endif
-#else
- m_file.Open(drive, "rb");
- if (m_file)
- {
- int fd = fileno(m_file.GetHandle());
-#if defined __linux__
- // NOTE: Doesn't matter if it fails, m_size was initialized to zero
- ioctl(fd, BLKGETSIZE64, &m_size); // u64*
-#elif defined __FreeBSD__
- off_t size = 0;
- ioctl(fd, DIOCGMEDIASIZE, &size); // off_t*
- m_size = size;
-#elif defined __APPLE__
- u64 count = 0;
- u32 block_size = 0;
- ioctl(fd, DKIOCGETBLOCKCOUNT, &count); // u64*
- ioctl(fd, DKIOCGETBLOCKSIZE, &block_size); // u32*
- m_size = count * block_size;
-#endif
-#endif
- }
- else
- {
- NOTICE_LOG_FMT(DISCIO, "Load from DVD backup failed or no disc in drive {}", drive);
- }
-}
-
-DriveReader::~DriveReader()
-{
-#ifdef _WIN32
-#ifdef _LOCKDRIVE // Do we want to lock the drive?
- // Unlock the disc in the CD-ROM drive.
- m_lock_cdrom.PreventMediaRemoval = FALSE;
- DeviceIoControl(m_disc_handle, IOCTL_CDROM_MEDIA_REMOVAL, &m_lock_cdrom, sizeof(m_lock_cdrom),
- nullptr, 0, &dwNotUsed, nullptr);
-#endif
- if (m_disc_handle != INVALID_HANDLE_VALUE)
- {
- CloseHandle(m_disc_handle);
- m_disc_handle = INVALID_HANDLE_VALUE;
- }
-#else
- m_file.Close();
-#endif
-}
-
-std::unique_ptr<DriveReader> DriveReader::Create(const std::string& drive)
-{
- auto reader = std::unique_ptr<DriveReader>(new DriveReader(drive));
-
- if (!reader->IsOK())
- reader.reset();
-
- return reader;
-}
-
-bool DriveReader::GetBlock(u64 block_num, u8* out_ptr)
-{
- return DriveReader::ReadMultipleAlignedBlocks(block_num, 1, out_ptr);
-}
-
-bool DriveReader::ReadMultipleAlignedBlocks(u64 block_num, u64 num_blocks, u8* out_ptr)
-{
-#ifdef _WIN32
- LARGE_INTEGER offset;
- offset.QuadPart = GetSectorSize() * block_num;
- DWORD bytes_read;
- if (!SetFilePointerEx(m_disc_handle, offset, nullptr, FILE_BEGIN) ||
- !ReadFile(m_disc_handle, out_ptr, static_cast<DWORD>(GetSectorSize() * num_blocks),
- &bytes_read, nullptr))
- {
- ERROR_LOG_FMT(DISCIO, "Disc Read Error");
- return false;
- }
- return bytes_read == GetSectorSize() * num_blocks;
-#else
- m_file.Seek(GetSectorSize() * block_num, File::SeekOrigin::Begin);
- if (m_file.ReadBytes(out_ptr, num_blocks * GetSectorSize()))
- return true;
- m_file.ClearError();
- return false;
-#endif
-}
-
-} // namespace DiscIO
diff --git a/Source/Core/DiscIO/DriveBlob.h b/Source/Core/DiscIO/DriveBlob.h
deleted file mode 100644
index bea2e827e5..0000000000
--- a/Source/Core/DiscIO/DriveBlob.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2008 Dolphin Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include <memory>
-#include <string>
-
-#include "Common/CommonTypes.h"
-#include "Common/IOFile.h"
-#include "DiscIO/Blob.h"
-
-#ifdef _WIN32
-#include <windows.h>
-#include <winioctl.h>
-#endif
-
-namespace DiscIO
-{
-class DriveReader : public SectorReader
-{
-public:
- static std::unique_ptr<DriveReader> Create(const std::string& drive);
- ~DriveReader();
-
- BlobType GetBlobType() const override { return BlobType::DRIVE; }
-
- u64 GetRawSize() const override { return m_size; }
- u64 GetDataSize() const override { return m_size; }
- DataSizeType GetDataSizeType() const override { return DataSizeType::Accurate; }
-
- u64 GetBlockSize() const override { return ECC_BLOCK_SIZE; }
- bool HasFastRandomAccessInBlock() const override { return false; }
- std::string GetCompressionMethod() const override { return {}; }
- std::optional<int> GetCompressionLevel() const override { return std::nullopt; }
-
-private:
- DriveReader(const std::string& drive);
- bool GetBlock(u64 block_num, u8* out_ptr) override;
- bool ReadMultipleAlignedBlocks(u64 block_num, u64 num_blocks, u8* out_ptr) override;
-
-#ifdef _WIN32
- HANDLE m_disc_handle = INVALID_HANDLE_VALUE;
- PREVENT_MEDIA_REMOVAL m_lock_cdrom;
- bool IsOK() const { return m_disc_handle != INVALID_HANDLE_VALUE; }
-#else
- File::IOFile m_file;
- bool IsOK() const { return m_file.IsOpen() && m_file.IsGood(); }
-#endif
- static constexpr u64 ECC_BLOCK_SIZE = 0x8000;
- u64 m_size = 0;
-};
-
-} // namespace DiscIO
diff --git a/Source/Core/DolphinLib.props b/Source/Core/DolphinLib.props
index 1ae8d7212a..62a60526c4 100644
--- a/Source/Core/DolphinLib.props
+++ b/Source/Core/DolphinLib.props
@@ -438,7 +438,6 @@
<ClInclude Include="DiscIO\DiscExtractor.h" />
<ClInclude Include="DiscIO\DiscScrubber.h" />
<ClInclude Include="DiscIO\DiscUtils.h" />
- <ClInclude Include="DiscIO\DriveBlob.h" />
<ClInclude Include="DiscIO\Enums.h" />
<ClInclude Include="DiscIO\FileBlob.h" />
<ClInclude Include="DiscIO\Filesystem.h" />
@@ -1051,7 +1050,6 @@
<ClCompile Include="DiscIO\DiscExtractor.cpp" />
<ClCompile Include="DiscIO\DiscScrubber.cpp" />
<ClCompile Include="DiscIO\DiscUtils.cpp" />
- <ClCompile Include="DiscIO\DriveBlob.cpp" />
<ClCompile Include="DiscIO\Enums.cpp" />
<ClCompile Include="DiscIO\FileBlob.cpp" />
<ClCompile Include="DiscIO\Filesystem.cpp" />
diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp
index 1b3e831ea0..ac9ae287ce 100644
--- a/Source/Core/DolphinQt/MainWindow.cpp
+++ b/Source/Core/DolphinQt/MainWindow.cpp
@@ -479,8 +479,6 @@ void MainWindow::ConnectMenuBar()
connect(m_menu_bar, &MenuBar::Exit, this, &MainWindow::close);
connect(m_menu_bar, &MenuBar::EjectDisc, this, &MainWindow::EjectDisc);
connect(m_menu_bar, &MenuBar::ChangeDisc, this, &MainWindow::ChangeDisc);
- connect(m_menu_bar, &MenuBar::BootDVDBackup, this,
- [this](const QString& drive) { StartGame(drive, ScanForSecondDisc::No); });
connect(m_menu_bar, &MenuBar::OpenUserFolder, this, &MainWindow::OpenUserFolder);
// Emulation
diff --git a/Source/Core/DolphinQt/MenuBar.cpp b/Source/Core/DolphinQt/MenuBar.cpp
index 8e23184d6b..d42bb959ab 100644
--- a/Source/Core/DolphinQt/MenuBar.cpp
+++ b/Source/Core/DolphinQt/MenuBar.cpp
@@ -189,19 +189,6 @@ void MenuBar::OnDebugModeToggled(bool enabled)
}
}
-void MenuBar::AddDVDBackupMenu(QMenu* file_menu)
-{
- m_backup_menu = file_menu->addMenu(tr("&Boot from DVD Backup"));
-
- const std::vector<std::string> drives = Common::GetCDDevices();
- // Windows Limitation of 24 character drives
- for (size_t i = 0; i < drives.size() && i < 24; i++)
- {
- auto drive = QString::fromStdString(drives[i]);
- m_backup_menu->addAction(drive, this, [this, drive] { emit BootDVDBackup(drive); });
- }
-}
-
void MenuBar::AddFileMenu()
{
QMenu* file_menu = addMenu(tr("&File"));
@@ -212,8 +199,6 @@ void MenuBar::AddFileMenu()
m_change_disc = file_menu->addAction(tr("Change &Disc..."), this, &MenuBar::ChangeDisc);
m_eject_disc = file_menu->addAction(tr("&Eject Disc"), this, &MenuBar::EjectDisc);
- AddDVDBackupMenu(file_menu);
-
file_menu->addSeparator();
m_open_user_folder =
diff --git a/Source/Core/DolphinQt/MenuBar.h b/Source/Core/DolphinQt/MenuBar.h
index c22c8a5135..40c0b01261 100644
--- a/Source/Core/DolphinQt/MenuBar.h
+++ b/Source/Core/DolphinQt/MenuBar.h
@@ -54,7 +54,6 @@ signals:
void Open();
void Exit();
void ChangeDisc();
- void BootDVDBackup(const QString& backup);
void EjectDisc();
void OpenUserFolder();
@@ -127,7 +126,6 @@ private:
void OnEmulationStateChanged(Core::State state);
void AddFileMenu();
- void AddDVDBackupMenu(QMenu* file_menu);
void AddEmulationMenu();
void AddStateLoadMenu(QMenu* emu_menu);