@@ -13,6 +13,7 @@
#include <utility>
#include <vector>

#include <fmt/format.h>
#include <mbedtls/md.h>
#include <mbedtls/rsa.h>
#include <mbedtls/sha1.h>
@@ -24,7 +25,6 @@
#include "Common/File.h"
#include "Common/FileUtil.h"
#include "Common/ScopeGuard.h"
#include "Common/StringUtil.h"
#include "Common/Swap.h"
#include "Core/IOS/Device.h"
#include "Core/IOS/ES/Formats.h"
@@ -430,8 +430,8 @@ static CertECC MakeBlankEccCert(const std::string& issuer, const std::string& na

CertECC IOSC::GetDeviceCertificate() const
{
const std::string name = StringFromFormat("NG%08x", GetDeviceId());
auto cert = MakeBlankEccCert(StringFromFormat("Root-CA%08x-MS%08x", m_ca_id, m_ms_id), name,
const std::string name = fmt::format("NG{:08x}", GetDeviceId());
auto cert = MakeBlankEccCert(fmt::format("Root-CA{:08x}-MS{:08x}", m_ca_id, m_ms_id), name,
m_key_entries[HANDLE_CONSOLE_KEY].data.data(), m_console_key_id);
cert.signature.sig = m_console_signature;
return cert;
@@ -448,8 +448,8 @@ void IOSC::Sign(u8* sig_out, u8* ap_cert_out, u64 title_id, const u8* data, u32
// ap_priv[0] &= 1;

const std::string signer =
StringFromFormat("Root-CA%08x-MS%08x-NG%08x", m_ca_id, m_ms_id, GetDeviceId());
const std::string name = StringFromFormat("AP%016" PRIx64, title_id);
fmt::format("Root-CA{:08x}-MS{:08x}-NG{:08x}", m_ca_id, m_ms_id, GetDeviceId());
const std::string name = fmt::format("AP{:016x}", title_id);
CertECC cert = MakeBlankEccCert(signer, name, ap_priv.data(), 0);
// Sign the AP cert.
const size_t skip = offsetof(CertECC, signature.issuer);
@@ -18,6 +18,8 @@
#include <poll.h>
#endif

#include <fmt/format.h>

#include "Common/Assert.h"
#include "Common/CommonTypes.h"
#include "Common/Logging/Log.h"
@@ -697,9 +699,9 @@ IPCCommandResult NetIPTop::HandleGetHostByNameRequest(const IOCtlRequest& reques

for (int i = 0; remoteHost->h_addr_list[i]; ++i)
{
u32 ip = Common::swap32(*(u32*)(remoteHost->h_addr_list[i]));
std::string ip_s =
StringFromFormat("%i.%i.%i.%i", ip >> 24, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff);
const u32 ip = Common::swap32(*(u32*)(remoteHost->h_addr_list[i]));
const std::string ip_s =
fmt::format("{}.{}.{}.{}", ip >> 24, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff);
DEBUG_LOG(IOS_NET, "addr%i:%s", i, ip_s.c_str());
}

@@ -5,11 +5,12 @@
#include "Core/IOS/USB/Bluetooth/BTEmu.h"

#include <algorithm>
#include <cstdint>
#include <cstring>
#include <memory>
#include <string>

#include <fmt/format.h>

#include "Common/Assert.h"
#include "Common/Logging/Log.h"
#include "Common/MsgHandler.h"
@@ -21,7 +22,6 @@
#include "Core/HW/Memmap.h"
#include "Core/HW/SystemTimers.h"
#include "Core/HW/Wiimote.h"
#include "Core/Host.h"
#include "Core/IOS/Device.h"
#include "Core/IOS/IOS.h"
#include "Core/SysConf.h"
@@ -1781,7 +1781,7 @@ void BluetoothEmu::DisplayDisconnectMessage(const int wiimote_number, const int
// mean
// and display things like "Wii Remote %i disconnected due to inactivity!" etc.
Core::DisplayMessage(
StringFromFormat("Wii Remote %i disconnected by emulated software", wiimote_number), 3000);
fmt::format("Wii Remote {} disconnected by emulated software", wiimote_number), 3000);
}
} // namespace Device
} // namespace IOS::HLE
@@ -6,9 +6,10 @@

#include <algorithm>

#include <fmt/format.h>

#include "Common/Assert.h"
#include "Common/CommonTypes.h"
#include "Common/StringUtil.h"
#include "Common/Swap.h"
#include "Core/HW/Memmap.h"

@@ -89,6 +90,6 @@ void EndpointDescriptor::Swap()

std::string Device::GetErrorName(const int error_code) const
{
return StringFromFormat("unknown error %d", error_code);
return fmt::format("unknown error {}", error_code);
}
} // namespace IOS::HLE::USB
@@ -11,6 +11,8 @@
#include <utility>
#include <vector>

#include <fmt/format.h>

#include "Common/CommonTypes.h"
#include "Common/File.h"
#include "Common/FileUtil.h"
@@ -25,13 +27,13 @@ namespace
{
std::string TitleIdStr(u64 tid)
{
return StringFromFormat("%c%c%c%c", static_cast<char>(tid >> 24), static_cast<char>(tid >> 16),
static_cast<char>(tid >> 8), static_cast<char>(tid));
return fmt::format("{}{}{}{}", static_cast<char>(tid >> 24), static_cast<char>(tid >> 16),
static_cast<char>(tid >> 8), static_cast<char>(tid));
}

std::string GroupIdStr(u16 gid)
{
return StringFromFormat("%c%c", gid >> 8, gid & 0xFF);
return fmt::format("{}{}", static_cast<char>(gid >> 8), static_cast<char>(gid & 0xFF));
}
} // namespace

@@ -119,9 +121,8 @@ void WFSI::SetImportTitleIdAndGroupId(u64 tid, u16 gid)

void WFSI::FinalizePatchInstall()
{
const std::string current_title_dir =
StringFromFormat("/vol/%s/title/%s/%s", m_device_name.c_str(), m_current_group_id_str.c_str(),
m_current_title_id_str.c_str());
const std::string current_title_dir = fmt::format("/vol/{}/title/{}/{}", m_device_name,
m_current_group_id_str, m_current_title_id_str);
const std::string patch_dir = current_title_dir + "/_patch";
File::CopyDir(WFS::NativePath(patch_dir), WFS::NativePath(current_title_dir), true);
}
@@ -145,9 +146,8 @@ IPCCommandResult WFSI::IOCtl(const IOCtlRequest& request)

if (m_patch_type == PatchType::PATCH_TYPE_2)
{
const std::string content_dir =
StringFromFormat("/vol/%s/title/%s/%s/content", m_device_name.c_str(),
m_current_group_id_str.c_str(), m_current_title_id_str.c_str());
const std::string content_dir = fmt::format("/vol/{}/title/{}/{}/content", m_device_name,
m_current_group_id_str, m_current_title_id_str);

File::Rename(WFS::NativePath(content_dir + "/default.dol"),
WFS::NativePath(content_dir + "/_default.dol"));
@@ -185,7 +185,7 @@ IPCCommandResult WFSI::IOCtl(const IOCtlRequest& request)
}

case IOCTL_WFSI_PREPARE_PROFILE:
m_base_extract_path = StringFromFormat("/vol/%s/tmp/", m_device_name.c_str());
m_base_extract_path = fmt::format("/vol/{}/tmp/", m_device_name);
[[fallthrough]];

case IOCTL_WFSI_PREPARE_CONTENT:
@@ -274,14 +274,13 @@ IPCCommandResult WFSI::IOCtl(const IOCtlRequest& request)
{
// Delete content's default.dol
const std::string title_content_dir =
StringFromFormat("/vol/%s/title/%s/%s/content/", m_device_name.c_str(),
m_current_group_id_str.c_str(), m_current_title_id_str.c_str());
fmt::format("/vol/{}/title/{}/{}/content/", m_device_name, m_current_group_id_str,
m_current_title_id_str);
File::Delete(WFS::NativePath(title_content_dir + "default.dol"));

// Copy content's _default.dol to patch's directory
const std::string patch_dir =
StringFromFormat("/vol/%s/title/%s/%s/_patch/", m_device_name.c_str(),
m_current_group_id_str.c_str(), m_current_title_id_str.c_str());
const std::string patch_dir = fmt::format("/vol/{}/title/{}/{}/_patch/", m_device_name,
m_current_group_id_str, m_current_title_id_str);
const std::string patch_content_dir = patch_dir + "content/";
File::CreateDir(WFS::NativePath(patch_dir));
File::CreateDir(WFS::NativePath(patch_content_dir));
@@ -293,28 +292,24 @@ IPCCommandResult WFSI::IOCtl(const IOCtlRequest& request)
}
case PATCH_TYPE_1:
{
std::string patch_dir =
StringFromFormat("/vol/%s/title/%s/%s/_patch", m_device_name.c_str(),
m_current_group_id_str.c_str(), m_current_title_id_str.c_str());
const std::string patch_dir = fmt::format("/vol/{}/title/{}/{}/_patch", m_device_name,
m_current_group_id_str, m_current_title_id_str);
File::DeleteDirRecursively(WFS::NativePath(patch_dir));

tmd_path = StringFromFormat("/vol/%s/title/%s/%s/meta/%016" PRIx64 ".tmd",
m_device_name.c_str(), m_current_group_id_str.c_str(),
m_current_title_id_str.c_str(), m_import_title_id);
tmd_path = fmt::format("/vol/{}/title/{}/{}/meta/{:016x}.tmd", m_device_name,
m_current_group_id_str, m_current_title_id_str, m_import_title_id);
break;
}
case NOT_A_PATCH:
{
std::string title_install_dir = StringFromFormat("/vol/%s/_install/%s", m_device_name.c_str(),
m_import_title_id_str.c_str());
std::string title_final_dir =
StringFromFormat("/vol/%s/title/%s/%s", m_device_name.c_str(),
m_import_group_id_str.c_str(), m_import_title_id_str.c_str());
const std::string title_install_dir =
fmt::format("/vol/{}/_install/{}", m_device_name, m_import_title_id_str);
const std::string title_final_dir = fmt::format("/vol/{}/title/{}/{}", m_device_name,
m_import_group_id_str, m_import_title_id_str);
File::Rename(WFS::NativePath(title_install_dir), WFS::NativePath(title_final_dir));

tmd_path = StringFromFormat("/vol/%s/title/%s/%s/meta/%016" PRIx64 ".tmd",
m_device_name.c_str(), m_import_group_id_str.c_str(),
m_import_title_id_str.c_str(), m_import_title_id);
tmd_path = fmt::format("/vol/{}/title/{}/{}/meta/{:016x}.tmd", m_device_name,
m_import_group_id_str, m_import_title_id_str, m_import_title_id);
break;
}
}
@@ -348,9 +343,8 @@ IPCCommandResult WFSI::IOCtl(const IOCtlRequest& request)
SetCurrentTitleIdAndGroupId(title_id, group_id);

// Change home directory
const std::string homedir_path =
StringFromFormat("/vol/%s/title/%s/%s/", m_device_name.c_str(),
m_current_group_id_str.c_str(), m_current_title_id_str.c_str());
const std::string homedir_path = fmt::format("/vol/{}/title/{}/{}/", m_device_name,
m_current_group_id_str, m_current_title_id_str);
const u16 homedir_path_len = static_cast<u16>(homedir_path.size());
INFO_LOG(IOS_WFS, "IOCTL_WFSI_CHANGE_TITLE: %s (path_len: 0x%x)", homedir_path.c_str(),
homedir_path_len);
@@ -414,34 +408,32 @@ IPCCommandResult WFSI::IOCtl(const IOCtlRequest& request)

if (m_patch_type == NOT_A_PATCH)
{
std::string install_directory = StringFromFormat("/vol/%s/_install", m_device_name.c_str());
const std::string install_directory = fmt::format("/vol/{}/_install", m_device_name);
if (!m_continue_install && File::IsDirectory(WFS::NativePath(install_directory)))
{
File::DeleteDirRecursively(WFS::NativePath(install_directory));
}

m_base_extract_path = StringFromFormat("%s/%s/content", install_directory.c_str(),
m_import_title_id_str.c_str());
m_base_extract_path = fmt::format("{}/{}/content", install_directory, m_import_title_id_str);
File::CreateFullPath(WFS::NativePath(m_base_extract_path));
File::CreateDir(WFS::NativePath(m_base_extract_path));

for (auto dir : {"work", "meta", "save"})
for (const auto dir : {"work", "meta", "save"})
{
std::string path = StringFromFormat("%s/%s/%s", install_directory.c_str(),
m_import_title_id_str.c_str(), dir);
const std::string path =
fmt::format("{}/{}/{}", install_directory, m_import_title_id_str, dir);
File::CreateDir(WFS::NativePath(path));
}

std::string group_path = StringFromFormat("/vol/%s/title/%s", m_device_name.c_str(),
m_import_group_id_str.c_str());
const std::string group_path =
fmt::format("/vol/{}/title/{}", m_device_name, m_import_group_id_str);
File::CreateFullPath(WFS::NativePath(group_path));
File::CreateDir(WFS::NativePath(group_path));
}
else
{
m_base_extract_path =
StringFromFormat("/vol/%s/title/%s/%s/_patch/content", m_device_name.c_str(),
m_current_group_id_str.c_str(), m_current_title_id_str.c_str());
m_base_extract_path = fmt::format("/vol/{}/title/{}/{}/_patch/content", m_device_name,
m_current_group_id_str, m_current_title_id_str);
File::CreateFullPath(WFS::NativePath(m_base_extract_path));
File::CreateDir(WFS::NativePath(m_base_extract_path));
}
@@ -489,21 +481,20 @@ IPCCommandResult WFSI::IOCtl(const IOCtlRequest& request)

case IOCTL_WFSI_LOAD_DOL:
{
std::string path =
StringFromFormat("/vol/%s/title/%s/%s/content", m_device_name.c_str(),
m_current_group_id_str.c_str(), m_current_title_id_str.c_str());
std::string path = fmt::format("/vol/{}/title/{}/{}/content", m_device_name,
m_current_group_id_str, m_current_title_id_str);

u32 dol_addr = Memory::Read_U32(request.buffer_in + 0x18);
u32 max_dol_size = Memory::Read_U32(request.buffer_in + 0x14);
u16 dol_extension_id = Memory::Read_U16(request.buffer_in + 0x1e);
const u32 dol_addr = Memory::Read_U32(request.buffer_in + 0x18);
const u32 max_dol_size = Memory::Read_U32(request.buffer_in + 0x14);
const u16 dol_extension_id = Memory::Read_U16(request.buffer_in + 0x1e);

if (dol_extension_id == 0)
{
path += "/default.dol";
}
else
{
path += StringFromFormat("/extension%d.dol", dol_extension_id);
path += fmt::format("/extension{}.dol", dol_extension_id);
}

INFO_LOG(IOS_WFS, "IOCTL_WFSI_LOAD_DOL: loading %s at address %08x (size %d)", path.c_str(),
@@ -562,9 +553,8 @@ IPCCommandResult WFSI::IOCtl(const IOCtlRequest& request)

u32 WFSI::GetTmd(u16 group_id, u32 title_id, u64 subtitle_id, u32 address, u32* size) const
{
std::string path =
StringFromFormat("/vol/%s/title/%s/%s/meta/%016" PRIx64 ".tmd", m_device_name.c_str(),
GroupIdStr(group_id).c_str(), TitleIdStr(title_id).c_str(), subtitle_id);
const std::string path = fmt::format("/vol/{}/title/{}/{}/meta/{:016x}.tmd", m_device_name,
GroupIdStr(group_id), TitleIdStr(title_id), subtitle_id);
File::IOFile fp(WFS::NativePath(path), "rb");
if (!fp)
{
@@ -581,10 +571,8 @@ u32 WFSI::GetTmd(u16 group_id, u32 title_id, u64 subtitle_id, u32 address, u32*

static s32 DeleteTemporaryFiles(const std::string& device_name, u64 title_id)
{
File::Delete(WFS::NativePath(
StringFromFormat("/vol/%s/tmp/%016" PRIx64 ".ini", device_name.c_str(), title_id)));
File::Delete(WFS::NativePath(
StringFromFormat("/vol/%s/tmp/%016" PRIx64 ".ppcini", device_name.c_str(), title_id)));
File::Delete(WFS::NativePath(fmt::format("/vol/{}/tmp/{:016x}.ini", device_name, title_id)));
File::Delete(WFS::NativePath(fmt::format("/vol/{}/tmp/{:016x}.ppcini", device_name, title_id)));
return IPC_SUCCESS;
}

@@ -594,8 +582,7 @@ s32 WFSI::CancelTitleImport(bool continue_install)

if (!continue_install)
{
File::DeleteDirRecursively(
WFS::NativePath(StringFromFormat("/vol/%s/_install", m_device_name.c_str())));
File::DeleteDirRecursively(WFS::NativePath(fmt::format("/vol/{}/_install", m_device_name)));
}

DeleteTemporaryFiles(m_device_name, m_import_title_id);
@@ -609,16 +596,15 @@ s32 WFSI::CancelPatchImport(bool continue_install)

if (!continue_install)
{
File::DeleteDirRecursively(WFS::NativePath(
StringFromFormat("/vol/%s/title/%s/%s/_patch", m_device_name.c_str(),
m_current_group_id_str.c_str(), m_current_title_id_str.c_str())));
File::DeleteDirRecursively(
WFS::NativePath(fmt::format("/vol/{}/title/{}/{}/_patch", m_device_name,
m_current_group_id_str, m_current_title_id_str)));

if (m_patch_type == PatchType::PATCH_TYPE_2)
{
// Move back _default.dol to default.dol.
const std::string content_dir =
StringFromFormat("/vol/%s/title/%s/%s/content", m_device_name.c_str(),
m_current_group_id_str.c_str(), m_current_title_id_str.c_str());
const std::string content_dir = fmt::format("/vol/{}/title/{}/{}/content", m_device_name,
m_current_group_id_str, m_current_title_id_str);
File::Rename(WFS::NativePath(content_dir + "/_default.dol"),
WFS::NativePath(content_dir + "/default.dol"));
}
@@ -8,13 +8,14 @@
#include <string>
#include <vector>

#include <fmt/format.h>

#include "Common/CommonPaths.h"
#include "Common/CommonTypes.h"
#include "Common/File.h"
#include "Common/FileUtil.h"
#include "Common/Logging/Log.h"
#include "Common/NandPaths.h"
#include "Common/StringUtil.h"
#include "Core/ConfigManager.h"
#include "Core/HW/WiiSave.h"
#include "Core/IOS/ES/ES.h"
@@ -268,7 +269,7 @@ void CleanUpWiiFileSystemContents()
const auto user_save = WiiSave::MakeNandStorage(configured_fs.get(), title_id);

const std::string backup_path =
File::GetUserPath(D_BACKUP_IDX) + StringFromFormat("/%016" PRIx64 ".bin", title_id);
fmt::format("{}/{:016x}.bin", File::GetUserPath(D_BACKUP_IDX), title_id);
const auto backup_save = WiiSave::MakeDataBinStorage(&ios->GetIOSC(), backup_path, "w+b");

// Backup the existing save just in case it's still needed.
@@ -8,7 +8,6 @@
#include <bitset>
#include <cinttypes>
#include <cstddef>
#include <cstring>
#include <map>
#include <memory>
#include <optional>
@@ -18,10 +17,10 @@
#include <utility>
#include <vector>

#include <fmt/format.h>
#include <pugixml.hpp>

#include "Common/Assert.h"
#include "Common/CommonPaths.h"
#include "Common/CommonTypes.h"
#include "Common/FileUtil.h"
#include "Common/HttpRequest.h"
@@ -43,7 +42,6 @@
#include "DiscIO/Filesystem.h"
#include "DiscIO/Volume.h"
#include "DiscIO/VolumeFileBlobReader.h"
#include "DiscIO/VolumeWii.h"
#include "DiscIO/WiiWad.h"

namespace WiiUtils
@@ -232,7 +230,7 @@ std::string SystemUpdater::GetDeviceId()
u32 ios_device_id;
if (m_ios.GetES()->GetDeviceId(&ios_device_id) < 0)
return "";
return StringFromFormat("%" PRIu64, (u64(1) << 32) | ios_device_id);
return std::to_string((u64(1) << 32) | ios_device_id);
}

class OnlineSystemUpdater final : public SystemUpdater
@@ -531,10 +529,9 @@ UpdateResult OnlineSystemUpdater::InstallTitleFromNUS(const std::string& prefix_
std::pair<IOS::ES::TMDReader, std::vector<u8>>
OnlineSystemUpdater::DownloadTMD(const std::string& prefix_url, const TitleInfo& title)
{
const std::string url =
(title.version == 0) ?
prefix_url + StringFromFormat("/%016" PRIx64 "/tmd", title.id) :
prefix_url + StringFromFormat("/%016" PRIx64 "/tmd.%u", title.id, title.version);
const std::string url = (title.version == 0) ?
fmt::format("{}/{:016x}/tmd", prefix_url, title.id) :
fmt::format("{}/{:016x}/tmd.{}", prefix_url, title.id, title.version);
const Common::HttpRequest::Response response = m_http.Get(url);
if (!response)
return {};
@@ -559,7 +556,7 @@ OnlineSystemUpdater::DownloadTMD(const std::string& prefix_url, const TitleInfo&
std::pair<std::vector<u8>, std::vector<u8>>
OnlineSystemUpdater::DownloadTicket(const std::string& prefix_url, const TitleInfo& title)
{
const std::string url = prefix_url + StringFromFormat("/%016" PRIx64 "/cetk", title.id);
const std::string url = fmt::format("{}/{:016x}/cetk", prefix_url, title.id);
const Common::HttpRequest::Response response = m_http.Get(url);
if (!response)
return {};
@@ -576,7 +573,7 @@ OnlineSystemUpdater::DownloadTicket(const std::string& prefix_url, const TitleIn
std::optional<std::vector<u8>> OnlineSystemUpdater::DownloadContent(const std::string& prefix_url,
const TitleInfo& title, u32 cid)
{
const std::string url = prefix_url + StringFromFormat("/%016" PRIx64 "/%08x", title.id, cid);
const std::string url = fmt::format("{}/{:016x}/{:08x}", prefix_url, title.id, cid);
return m_http.Get(url);
}