Merge pull request #4786 from lioncash/flags
core/CMakeLists: Make some warnings errors
This commit is contained in:
commit
c5b3c8d06b
|
@ -90,6 +90,9 @@ if (ENABLE_WEB_SERVICE)
|
||||||
target_include_directories(httplib INTERFACE ./httplib)
|
target_include_directories(httplib INTERFACE ./httplib)
|
||||||
target_compile_definitions(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT)
|
target_compile_definitions(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT)
|
||||||
target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES})
|
target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES})
|
||||||
|
if (WIN32)
|
||||||
|
target_link_libraries(httplib INTERFACE crypt32 cryptui ws2_32)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Opus
|
# Opus
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -16,14 +16,14 @@ namespace Common {
|
||||||
|
|
||||||
[[nodiscard]] constexpr u8 ToHexNibble(char c) {
|
[[nodiscard]] constexpr u8 ToHexNibble(char c) {
|
||||||
if (c >= 65 && c <= 70) {
|
if (c >= 65 && c <= 70) {
|
||||||
return c - 55;
|
return static_cast<u8>(c - 55);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c >= 97 && c <= 102) {
|
if (c >= 97 && c <= 102) {
|
||||||
return c - 87;
|
return static_cast<u8>(c - 87);
|
||||||
}
|
}
|
||||||
|
|
||||||
return c - 48;
|
return static_cast<u8>(c - 48);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] std::vector<u8> HexStringToVector(std::string_view str, bool little_endian);
|
[[nodiscard]] std::vector<u8> HexStringToVector(std::string_view str, bool little_endian);
|
||||||
|
@ -33,11 +33,11 @@ template <std::size_t Size, bool le = false>
|
||||||
std::array<u8, Size> out{};
|
std::array<u8, Size> out{};
|
||||||
if constexpr (le) {
|
if constexpr (le) {
|
||||||
for (std::size_t i = 2 * Size - 2; i <= 2 * Size; i -= 2) {
|
for (std::size_t i = 2 * Size - 2; i <= 2 * Size; i -= 2) {
|
||||||
out[i / 2] = (ToHexNibble(str[i]) << 4) | ToHexNibble(str[i + 1]);
|
out[i / 2] = static_cast<u8>((ToHexNibble(str[i]) << 4) | ToHexNibble(str[i + 1]));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (std::size_t i = 0; i < 2 * Size; i += 2) {
|
for (std::size_t i = 0; i < 2 * Size; i += 2) {
|
||||||
out[i / 2] = (ToHexNibble(str[i]) << 4) | ToHexNibble(str[i + 1]);
|
out[i / 2] = static_cast<u8>((ToHexNibble(str[i]) << 4) | ToHexNibble(str[i + 1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
|
|
|
@ -623,6 +623,17 @@ if (MSVC)
|
||||||
# 'context' : truncation from 'type1' to 'type2'
|
# 'context' : truncation from 'type1' to 'type2'
|
||||||
/we4305
|
/we4305
|
||||||
)
|
)
|
||||||
|
else()
|
||||||
|
target_compile_options(core PRIVATE
|
||||||
|
-Werror=conversion
|
||||||
|
-Werror=ignored-qualifiers
|
||||||
|
-Werror=implicit-fallthrough
|
||||||
|
-Werror=reorder
|
||||||
|
-Werror=sign-compare
|
||||||
|
-Werror=unused-but-set-parameter
|
||||||
|
-Werror=unused-but-set-variable
|
||||||
|
-Werror=unused-variable
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
create_target_directory_groups(core)
|
create_target_directory_groups(core)
|
||||||
|
|
|
@ -411,7 +411,7 @@ Loader::ResultStatus DeriveSDKeys(std::array<Key256, 2>& sd_keys, KeyManager& ke
|
||||||
// Combine sources and seed
|
// Combine sources and seed
|
||||||
for (auto& source : sd_key_sources) {
|
for (auto& source : sd_key_sources) {
|
||||||
for (std::size_t i = 0; i < source.size(); ++i) {
|
for (std::size_t i = 0; i < source.size(); ++i) {
|
||||||
source[i] ^= sd_seed[i & 0xF];
|
source[i] = static_cast<u8>(source[i] ^ sd_seed[i & 0xF]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -266,8 +266,9 @@ std::multimap<u64, VirtualFile> RomFSBuildContext::Build() {
|
||||||
cur_file->offset = file_partition_size;
|
cur_file->offset = file_partition_size;
|
||||||
file_partition_size += cur_file->size;
|
file_partition_size += cur_file->size;
|
||||||
cur_file->entry_offset = entry_offset;
|
cur_file->entry_offset = entry_offset;
|
||||||
entry_offset += sizeof(RomFSFileEntry) +
|
entry_offset +=
|
||||||
Common::AlignUp(cur_file->path_len - cur_file->cur_path_ofs, 4);
|
static_cast<u32>(sizeof(RomFSFileEntry) +
|
||||||
|
Common::AlignUp(cur_file->path_len - cur_file->cur_path_ofs, 4));
|
||||||
prev_file = cur_file;
|
prev_file = cur_file;
|
||||||
}
|
}
|
||||||
// Assign deferred parent/sibling ownership.
|
// Assign deferred parent/sibling ownership.
|
||||||
|
@ -284,8 +285,9 @@ std::multimap<u64, VirtualFile> RomFSBuildContext::Build() {
|
||||||
for (const auto& it : directories) {
|
for (const auto& it : directories) {
|
||||||
cur_dir = it.second;
|
cur_dir = it.second;
|
||||||
cur_dir->entry_offset = entry_offset;
|
cur_dir->entry_offset = entry_offset;
|
||||||
entry_offset += sizeof(RomFSDirectoryEntry) +
|
entry_offset +=
|
||||||
Common::AlignUp(cur_dir->path_len - cur_dir->cur_path_ofs, 4);
|
static_cast<u32>(sizeof(RomFSDirectoryEntry) +
|
||||||
|
Common::AlignUp(cur_dir->path_len - cur_dir->cur_path_ofs, 4));
|
||||||
}
|
}
|
||||||
// Assign deferred parent/sibling ownership.
|
// Assign deferred parent/sibling ownership.
|
||||||
for (auto it = directories.rbegin(); it->second != root; ++it) {
|
for (auto it = directories.rbegin(); it->second != root; ++it) {
|
||||||
|
|
|
@ -299,7 +299,7 @@ void IPSwitchCompiler::Parse() {
|
||||||
patch_text->GetName(), offset, Common::HexToString(replace));
|
patch_text->GetName(), offset, Common::HexToString(replace));
|
||||||
}
|
}
|
||||||
|
|
||||||
patch.records.insert_or_assign(offset, std::move(replace));
|
patch.records.insert_or_assign(static_cast<u32>(offset), std::move(replace));
|
||||||
}
|
}
|
||||||
|
|
||||||
patches.push_back(std::move(patch));
|
patches.push_back(std::move(patch));
|
||||||
|
|
|
@ -108,7 +108,7 @@ std::vector<u8> CNMT::Serialize() const {
|
||||||
memcpy(out.data() + sizeof(CNMTHeader), &opt_header, sizeof(OptionalHeader));
|
memcpy(out.data() + sizeof(CNMTHeader), &opt_header, sizeof(OptionalHeader));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto offset = header.table_offset;
|
u64_le offset = header.table_offset;
|
||||||
|
|
||||||
for (const auto& rec : content_records) {
|
for (const auto& rec : content_records) {
|
||||||
memcpy(out.data() + offset + sizeof(CNMTHeader), &rec, sizeof(ContentRecord));
|
memcpy(out.data() + offset + sizeof(CNMTHeader), &rec, sizeof(ContentRecord));
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
namespace FileSys {
|
namespace FileSys {
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
constexpr u64 SINGLE_BYTE_MODULUS = 0x100;
|
constexpr u32 SINGLE_BYTE_MODULUS = 0x100;
|
||||||
constexpr u64 DLC_BASE_TITLE_ID_MASK = 0xFFFFFFFFFFFFE000;
|
constexpr u64 DLC_BASE_TITLE_ID_MASK = 0xFFFFFFFFFFFFE000;
|
||||||
|
|
||||||
constexpr std::array<const char*, 14> EXEFS_FILE_NAMES{
|
constexpr std::array<const char*, 14> EXEFS_FILE_NAMES{
|
||||||
|
|
|
@ -84,10 +84,12 @@ void EmuWindow::TouchPressed(unsigned framebuffer_x, unsigned framebuffer_y) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::lock_guard guard{touch_state->mutex};
|
std::lock_guard guard{touch_state->mutex};
|
||||||
touch_state->touch_x = static_cast<float>(framebuffer_x - framebuffer_layout.screen.left) /
|
touch_state->touch_x =
|
||||||
(framebuffer_layout.screen.right - framebuffer_layout.screen.left);
|
static_cast<float>(framebuffer_x - framebuffer_layout.screen.left) /
|
||||||
touch_state->touch_y = static_cast<float>(framebuffer_y - framebuffer_layout.screen.top) /
|
static_cast<float>(framebuffer_layout.screen.right - framebuffer_layout.screen.left);
|
||||||
(framebuffer_layout.screen.bottom - framebuffer_layout.screen.top);
|
touch_state->touch_y =
|
||||||
|
static_cast<float>(framebuffer_y - framebuffer_layout.screen.top) /
|
||||||
|
static_cast<float>(framebuffer_layout.screen.bottom - framebuffer_layout.screen.top);
|
||||||
|
|
||||||
touch_state->touch_pressed = true;
|
touch_state->touch_pressed = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,8 +14,8 @@ namespace Layout {
|
||||||
template <class T>
|
template <class T>
|
||||||
static Common::Rectangle<T> MaxRectangle(Common::Rectangle<T> window_area,
|
static Common::Rectangle<T> MaxRectangle(Common::Rectangle<T> window_area,
|
||||||
float screen_aspect_ratio) {
|
float screen_aspect_ratio) {
|
||||||
float scale = std::min(static_cast<float>(window_area.GetWidth()),
|
const float scale = std::min(static_cast<float>(window_area.GetWidth()),
|
||||||
window_area.GetHeight() / screen_aspect_ratio);
|
static_cast<float>(window_area.GetHeight()) / screen_aspect_ratio);
|
||||||
return Common::Rectangle<T>{0, 0, static_cast<T>(std::round(scale)),
|
return Common::Rectangle<T>{0, 0, static_cast<T>(std::round(scale)),
|
||||||
static_cast<T>(std::round(scale * screen_aspect_ratio))};
|
static_cast<T>(std::round(scale * screen_aspect_ratio))};
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ FramebufferLayout DefaultFrameLayout(u32 width, u32 height) {
|
||||||
// so just calculate them both even if the other isn't showing.
|
// so just calculate them both even if the other isn't showing.
|
||||||
FramebufferLayout res{width, height, false, {}};
|
FramebufferLayout res{width, height, false, {}};
|
||||||
|
|
||||||
const float window_aspect_ratio = static_cast<float>(height) / width;
|
const float window_aspect_ratio = static_cast<float>(height) / static_cast<float>(width);
|
||||||
const float emulation_aspect_ratio = EmulationAspectRatio(
|
const float emulation_aspect_ratio = EmulationAspectRatio(
|
||||||
static_cast<AspectRatio>(Settings::values.aspect_ratio.GetValue()), window_aspect_ratio);
|
static_cast<AspectRatio>(Settings::values.aspect_ratio.GetValue()), window_aspect_ratio);
|
||||||
|
|
||||||
|
|
|
@ -291,11 +291,11 @@ static void FpuWrite(std::size_t id, u128 val, Kernel::Thread* thread = nullptr)
|
||||||
*/
|
*/
|
||||||
static u8 HexCharToValue(u8 hex) {
|
static u8 HexCharToValue(u8 hex) {
|
||||||
if (hex >= '0' && hex <= '9') {
|
if (hex >= '0' && hex <= '9') {
|
||||||
return hex - '0';
|
return static_cast<u8>(hex - '0');
|
||||||
} else if (hex >= 'a' && hex <= 'f') {
|
} else if (hex >= 'a' && hex <= 'f') {
|
||||||
return hex - 'a' + 0xA;
|
return static_cast<u8>(hex - 'a' + 0xA);
|
||||||
} else if (hex >= 'A' && hex <= 'F') {
|
} else if (hex >= 'A' && hex <= 'F') {
|
||||||
return hex - 'A' + 0xA;
|
return static_cast<u8>(hex - 'A' + 0xA);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_ERROR(Debug_GDBStub, "Invalid nibble: {} ({:02X})", hex, hex);
|
LOG_ERROR(Debug_GDBStub, "Invalid nibble: {} ({:02X})", hex, hex);
|
||||||
|
@ -310,9 +310,9 @@ static u8 HexCharToValue(u8 hex) {
|
||||||
static u8 NibbleToHex(u8 n) {
|
static u8 NibbleToHex(u8 n) {
|
||||||
n &= 0xF;
|
n &= 0xF;
|
||||||
if (n < 0xA) {
|
if (n < 0xA) {
|
||||||
return '0' + n;
|
return static_cast<u8>('0' + n);
|
||||||
} else {
|
} else {
|
||||||
return 'a' + n - 0xA;
|
return static_cast<u8>('a' + n - 0xA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,8 +355,8 @@ static u64 HexToLong(const u8* src, std::size_t len) {
|
||||||
*/
|
*/
|
||||||
static void MemToGdbHex(u8* dest, const u8* src, std::size_t len) {
|
static void MemToGdbHex(u8* dest, const u8* src, std::size_t len) {
|
||||||
while (len-- > 0) {
|
while (len-- > 0) {
|
||||||
u8 tmp = *src++;
|
const u8 tmp = *src++;
|
||||||
*dest++ = NibbleToHex(tmp >> 4);
|
*dest++ = NibbleToHex(static_cast<u8>(tmp >> 4));
|
||||||
*dest++ = NibbleToHex(tmp);
|
*dest++ = NibbleToHex(tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -370,7 +370,7 @@ static void MemToGdbHex(u8* dest, const u8* src, std::size_t len) {
|
||||||
*/
|
*/
|
||||||
static void GdbHexToMem(u8* dest, const u8* src, std::size_t len) {
|
static void GdbHexToMem(u8* dest, const u8* src, std::size_t len) {
|
||||||
while (len-- > 0) {
|
while (len-- > 0) {
|
||||||
*dest++ = (HexCharToValue(src[0]) << 4) | HexCharToValue(src[1]);
|
*dest++ = static_cast<u8>((HexCharToValue(src[0]) << 4) | HexCharToValue(src[1]));
|
||||||
src += 2;
|
src += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -602,22 +602,22 @@ static void SendReply(const char* reply) {
|
||||||
|
|
||||||
memcpy(command_buffer + 1, reply, command_length);
|
memcpy(command_buffer + 1, reply, command_length);
|
||||||
|
|
||||||
u8 checksum = CalculateChecksum(command_buffer, command_length + 1);
|
const u8 checksum = CalculateChecksum(command_buffer, command_length + 1);
|
||||||
command_buffer[0] = GDB_STUB_START;
|
command_buffer[0] = GDB_STUB_START;
|
||||||
command_buffer[command_length + 1] = GDB_STUB_END;
|
command_buffer[command_length + 1] = GDB_STUB_END;
|
||||||
command_buffer[command_length + 2] = NibbleToHex(checksum >> 4);
|
command_buffer[command_length + 2] = NibbleToHex(static_cast<u8>(checksum >> 4));
|
||||||
command_buffer[command_length + 3] = NibbleToHex(checksum);
|
command_buffer[command_length + 3] = NibbleToHex(checksum);
|
||||||
|
|
||||||
u8* ptr = command_buffer;
|
u8* ptr = command_buffer;
|
||||||
u32 left = command_length + 4;
|
u32 left = command_length + 4;
|
||||||
while (left > 0) {
|
while (left > 0) {
|
||||||
int sent_size = send(gdbserver_socket, reinterpret_cast<char*>(ptr), left, 0);
|
const auto sent_size = send(gdbserver_socket, reinterpret_cast<char*>(ptr), left, 0);
|
||||||
if (sent_size < 0) {
|
if (sent_size < 0) {
|
||||||
LOG_ERROR(Debug_GDBStub, "gdb: send failed");
|
LOG_ERROR(Debug_GDBStub, "gdb: send failed");
|
||||||
return Shutdown();
|
return Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
left -= sent_size;
|
left -= static_cast<u32>(sent_size);
|
||||||
ptr += sent_size;
|
ptr += sent_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -777,10 +777,10 @@ static void ReadCommand() {
|
||||||
command_buffer[command_length++] = c;
|
command_buffer[command_length++] = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 checksum_received = HexCharToValue(ReadByte()) << 4;
|
auto checksum_received = static_cast<u32>(HexCharToValue(ReadByte()) << 4);
|
||||||
checksum_received |= HexCharToValue(ReadByte());
|
checksum_received |= static_cast<u32>(HexCharToValue(ReadByte()));
|
||||||
|
|
||||||
u8 checksum_calculated = CalculateChecksum(command_buffer, command_length);
|
const u32 checksum_calculated = CalculateChecksum(command_buffer, command_length);
|
||||||
|
|
||||||
if (checksum_received != checksum_calculated) {
|
if (checksum_received != checksum_calculated) {
|
||||||
LOG_ERROR(Debug_GDBStub,
|
LOG_ERROR(Debug_GDBStub,
|
||||||
|
|
|
@ -38,10 +38,11 @@ public:
|
||||||
explicit RequestHelperBase(Kernel::HLERequestContext& context)
|
explicit RequestHelperBase(Kernel::HLERequestContext& context)
|
||||||
: context(&context), cmdbuf(context.CommandBuffer()) {}
|
: context(&context), cmdbuf(context.CommandBuffer()) {}
|
||||||
|
|
||||||
void Skip(unsigned size_in_words, bool set_to_null) {
|
void Skip(u32 size_in_words, bool set_to_null) {
|
||||||
if (set_to_null)
|
if (set_to_null) {
|
||||||
memset(cmdbuf + index, 0, size_in_words * sizeof(u32));
|
memset(cmdbuf + index, 0, size_in_words * sizeof(u32));
|
||||||
index += size_in_words;
|
}
|
||||||
|
index += static_cast<ptrdiff_t>(size_in_words);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,15 +50,15 @@ public:
|
||||||
*/
|
*/
|
||||||
void AlignWithPadding() {
|
void AlignWithPadding() {
|
||||||
if (index & 3) {
|
if (index & 3) {
|
||||||
Skip(4 - (index & 3), true);
|
Skip(static_cast<u32>(4 - (index & 3)), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned GetCurrentOffset() const {
|
u32 GetCurrentOffset() const {
|
||||||
return static_cast<unsigned>(index);
|
return static_cast<u32>(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetCurrentOffset(unsigned offset) {
|
void SetCurrentOffset(u32 offset) {
|
||||||
index = static_cast<ptrdiff_t>(offset);
|
index = static_cast<ptrdiff_t>(offset);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -89,7 +90,7 @@ public:
|
||||||
|
|
||||||
// The entire size of the raw data section in u32 units, including the 16 bytes of mandatory
|
// The entire size of the raw data section in u32 units, including the 16 bytes of mandatory
|
||||||
// padding.
|
// padding.
|
||||||
u32 raw_data_size = sizeof(IPC::DataPayloadHeader) / 4 + 4 + normal_params_size;
|
u64 raw_data_size = sizeof(IPC::DataPayloadHeader) / 4 + 4 + normal_params_size;
|
||||||
|
|
||||||
u32 num_handles_to_move{};
|
u32 num_handles_to_move{};
|
||||||
u32 num_domain_objects{};
|
u32 num_domain_objects{};
|
||||||
|
@ -105,7 +106,7 @@ public:
|
||||||
raw_data_size += sizeof(DomainMessageHeader) / 4 + num_domain_objects;
|
raw_data_size += sizeof(DomainMessageHeader) / 4 + num_domain_objects;
|
||||||
}
|
}
|
||||||
|
|
||||||
header.data_size.Assign(raw_data_size);
|
header.data_size.Assign(static_cast<u32>(raw_data_size));
|
||||||
if (num_handles_to_copy || num_handles_to_move) {
|
if (num_handles_to_copy || num_handles_to_move) {
|
||||||
header.enable_handle_descriptor.Assign(1);
|
header.enable_handle_descriptor.Assign(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,7 +118,7 @@ std::shared_ptr<Object> HandleTable::GetGeneric(Handle handle) const {
|
||||||
|
|
||||||
void HandleTable::Clear() {
|
void HandleTable::Clear() {
|
||||||
for (u16 i = 0; i < table_size; ++i) {
|
for (u16 i = 0; i < table_size; ++i) {
|
||||||
generations[i] = i + 1;
|
generations[i] = static_cast<u16>(i + 1);
|
||||||
objects[i] = nullptr;
|
objects[i] = nullptr;
|
||||||
}
|
}
|
||||||
next_free_slot = 0;
|
next_free_slot = 0;
|
||||||
|
|
|
@ -72,7 +72,7 @@ u32 GlobalScheduler::SelectThreads() {
|
||||||
if (top_thread != nullptr) {
|
if (top_thread != nullptr) {
|
||||||
// TODO(Blinkhawk): Implement Thread Pinning
|
// TODO(Blinkhawk): Implement Thread Pinning
|
||||||
} else {
|
} else {
|
||||||
idle_cores |= (1ul << core);
|
idle_cores |= (1U << core);
|
||||||
}
|
}
|
||||||
top_threads[core] = top_thread;
|
top_threads[core] = top_thread;
|
||||||
}
|
}
|
||||||
|
@ -126,7 +126,7 @@ u32 GlobalScheduler::SelectThreads() {
|
||||||
top_threads[core_id] = suggested;
|
top_threads[core_id] = suggested;
|
||||||
}
|
}
|
||||||
|
|
||||||
idle_cores &= ~(1ul << core_id);
|
idle_cores &= ~(1U << core_id);
|
||||||
}
|
}
|
||||||
u32 cores_needing_context_switch{};
|
u32 cores_needing_context_switch{};
|
||||||
for (u32 core = 0; core < Core::Hardware::NUM_CPU_CORES; core++) {
|
for (u32 core = 0; core < Core::Hardware::NUM_CPU_CORES; core++) {
|
||||||
|
@ -134,7 +134,7 @@ u32 GlobalScheduler::SelectThreads() {
|
||||||
ASSERT(top_threads[core] == nullptr ||
|
ASSERT(top_threads[core] == nullptr ||
|
||||||
static_cast<u32>(top_threads[core]->GetProcessorID()) == core);
|
static_cast<u32>(top_threads[core]->GetProcessorID()) == core);
|
||||||
if (update_thread(top_threads[core], sched)) {
|
if (update_thread(top_threads[core], sched)) {
|
||||||
cores_needing_context_switch |= (1ul << core);
|
cores_needing_context_switch |= (1U << core);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cores_needing_context_switch;
|
return cores_needing_context_switch;
|
||||||
|
@ -364,7 +364,7 @@ void GlobalScheduler::EnableInterruptAndSchedule(u32 cores_pending_reschedule,
|
||||||
} else {
|
} else {
|
||||||
must_context_switch = true;
|
must_context_switch = true;
|
||||||
}
|
}
|
||||||
cores_pending_reschedule &= ~(1ul << core);
|
cores_pending_reschedule &= ~(1U << core);
|
||||||
}
|
}
|
||||||
if (must_context_switch) {
|
if (must_context_switch) {
|
||||||
auto& core_scheduler = kernel.CurrentScheduler();
|
auto& core_scheduler = kernel.CurrentScheduler();
|
||||||
|
@ -767,7 +767,7 @@ void Scheduler::SwitchToCurrent() {
|
||||||
current_thread->context_guard.unlock();
|
current_thread->context_guard.unlock();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (current_thread->GetProcessorID() != core_id) {
|
if (static_cast<u32>(current_thread->GetProcessorID()) != core_id) {
|
||||||
current_thread->context_guard.unlock();
|
current_thread->context_guard.unlock();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,7 +196,9 @@ private:
|
||||||
const std::string& content_type_name) {
|
const std::string& content_type_name) {
|
||||||
if (client == nullptr) {
|
if (client == nullptr) {
|
||||||
client = std::make_unique<httplib::SSLClient>(BOXCAT_HOSTNAME, PORT);
|
client = std::make_unique<httplib::SSLClient>(BOXCAT_HOSTNAME, PORT);
|
||||||
client->set_timeout_sec(timeout_seconds);
|
client->set_connection_timeout(timeout_seconds);
|
||||||
|
client->set_read_timeout(timeout_seconds);
|
||||||
|
client->set_write_timeout(timeout_seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
httplib::Headers headers{
|
httplib::Headers headers{
|
||||||
|
@ -255,7 +257,7 @@ private:
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<httplib::Client> client;
|
std::unique_ptr<httplib::SSLClient> client;
|
||||||
std::string path;
|
std::string path;
|
||||||
u64 title_id;
|
u64 title_id;
|
||||||
u64 build_id;
|
u64 build_id;
|
||||||
|
@ -443,7 +445,9 @@ std::optional<std::vector<u8>> Boxcat::GetLaunchParameter(TitleIDVersion title)
|
||||||
Boxcat::StatusResult Boxcat::GetStatus(std::optional<std::string>& global,
|
Boxcat::StatusResult Boxcat::GetStatus(std::optional<std::string>& global,
|
||||||
std::map<std::string, EventStatus>& games) {
|
std::map<std::string, EventStatus>& games) {
|
||||||
httplib::SSLClient client{BOXCAT_HOSTNAME, static_cast<int>(PORT)};
|
httplib::SSLClient client{BOXCAT_HOSTNAME, static_cast<int>(PORT)};
|
||||||
client.set_timeout_sec(static_cast<int>(TIMEOUT_SECONDS));
|
client.set_connection_timeout(static_cast<int>(TIMEOUT_SECONDS));
|
||||||
|
client.set_read_timeout(static_cast<int>(TIMEOUT_SECONDS));
|
||||||
|
client.set_write_timeout(static_cast<int>(TIMEOUT_SECONDS));
|
||||||
|
|
||||||
httplib::Headers headers{
|
httplib::Headers headers{
|
||||||
{std::string("Game-Assets-API-Version"), std::string(BOXCAT_API_VERSION)},
|
{std::string("Game-Assets-API-Version"), std::string(BOXCAT_API_VERSION)},
|
||||||
|
|
|
@ -42,8 +42,8 @@ void Controller_Keyboard::OnUpdate(const Core::Timing::CoreTiming& core_timing,
|
||||||
cur_entry.modifier = 0;
|
cur_entry.modifier = 0;
|
||||||
if (Settings::values.keyboard_enabled) {
|
if (Settings::values.keyboard_enabled) {
|
||||||
for (std::size_t i = 0; i < keyboard_keys.size(); ++i) {
|
for (std::size_t i = 0; i < keyboard_keys.size(); ++i) {
|
||||||
cur_entry.key[i / KEYS_PER_BYTE] |=
|
auto& entry = cur_entry.key[i / KEYS_PER_BYTE];
|
||||||
(keyboard_keys[i]->GetStatus() << (i % KEYS_PER_BYTE));
|
entry = static_cast<u8>(entry | (keyboard_keys[i]->GetStatus() << (i % KEYS_PER_BYTE)));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (std::size_t i = 0; i < keyboard_mods.size(); ++i) {
|
for (std::size_t i = 0; i < keyboard_mods.size(); ++i) {
|
||||||
|
|
|
@ -269,7 +269,6 @@ void Controller_NPad::RequestPadStateUpdate(u32 npad_id) {
|
||||||
auto& rstick_entry = npad_pad_states[controller_idx].r_stick;
|
auto& rstick_entry = npad_pad_states[controller_idx].r_stick;
|
||||||
const auto& button_state = buttons[controller_idx];
|
const auto& button_state = buttons[controller_idx];
|
||||||
const auto& analog_state = sticks[controller_idx];
|
const auto& analog_state = sticks[controller_idx];
|
||||||
const auto& motion_state = motions[controller_idx];
|
|
||||||
const auto [stick_l_x_f, stick_l_y_f] =
|
const auto [stick_l_x_f, stick_l_y_f] =
|
||||||
analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetStatus();
|
analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetStatus();
|
||||||
const auto [stick_r_x_f, stick_r_y_f] =
|
const auto [stick_r_x_f, stick_r_y_f] =
|
||||||
|
@ -391,18 +390,6 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8*
|
||||||
|
|
||||||
libnx_entry.connection_status.raw = 0;
|
libnx_entry.connection_status.raw = 0;
|
||||||
libnx_entry.connection_status.IsConnected.Assign(1);
|
libnx_entry.connection_status.IsConnected.Assign(1);
|
||||||
auto& full_sixaxis_entry =
|
|
||||||
npad.sixaxis_full.sixaxis[npad.sixaxis_full.common.last_entry_index];
|
|
||||||
auto& handheld_sixaxis_entry =
|
|
||||||
npad.sixaxis_handheld.sixaxis[npad.sixaxis_handheld.common.last_entry_index];
|
|
||||||
auto& dual_left_sixaxis_entry =
|
|
||||||
npad.sixaxis_dual_left.sixaxis[npad.sixaxis_dual_left.common.last_entry_index];
|
|
||||||
auto& dual_right_sixaxis_entry =
|
|
||||||
npad.sixaxis_dual_right.sixaxis[npad.sixaxis_dual_right.common.last_entry_index];
|
|
||||||
auto& left_sixaxis_entry =
|
|
||||||
npad.sixaxis_left.sixaxis[npad.sixaxis_left.common.last_entry_index];
|
|
||||||
auto& right_sixaxis_entry =
|
|
||||||
npad.sixaxis_right.sixaxis[npad.sixaxis_right.common.last_entry_index];
|
|
||||||
|
|
||||||
switch (controller_type) {
|
switch (controller_type) {
|
||||||
case NPadControllerType::None:
|
case NPadControllerType::None:
|
||||||
|
@ -541,18 +528,6 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto& main_controller =
|
|
||||||
npad.main_controller_states.npad[npad.main_controller_states.common.last_entry_index];
|
|
||||||
auto& handheld_entry =
|
|
||||||
npad.handheld_states.npad[npad.handheld_states.common.last_entry_index];
|
|
||||||
auto& dual_entry = npad.dual_states.npad[npad.dual_states.common.last_entry_index];
|
|
||||||
auto& left_entry = npad.left_joy_states.npad[npad.left_joy_states.common.last_entry_index];
|
|
||||||
auto& right_entry =
|
|
||||||
npad.right_joy_states.npad[npad.right_joy_states.common.last_entry_index];
|
|
||||||
auto& pokeball_entry =
|
|
||||||
npad.pokeball_states.npad[npad.pokeball_states.common.last_entry_index];
|
|
||||||
auto& libnx_entry = npad.libnx.npad[npad.libnx.common.last_entry_index];
|
|
||||||
|
|
||||||
auto& full_sixaxis_entry =
|
auto& full_sixaxis_entry =
|
||||||
npad.sixaxis_full.sixaxis[npad.sixaxis_full.common.last_entry_index];
|
npad.sixaxis_full.sixaxis[npad.sixaxis_full.common.last_entry_index];
|
||||||
auto& handheld_sixaxis_entry =
|
auto& handheld_sixaxis_entry =
|
||||||
|
|
|
@ -475,7 +475,7 @@ void Hid::StopSixAxisSensor(Kernel::HLERequestContext& ctx) {
|
||||||
|
|
||||||
void Hid::EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx) {
|
void Hid::EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const auto enable{rp.Pop<bool>()};
|
[[maybe_unused]] const auto enable{rp.Pop<bool>()};
|
||||||
const auto handle{rp.Pop<u32>()};
|
const auto handle{rp.Pop<u32>()};
|
||||||
const auto applet_resource_user_id{rp.Pop<u64>()};
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
|
|
@ -428,7 +428,7 @@ bool MiiManager::IsFullDatabase() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 MiiManager::GetCount(SourceFlag source_flag) const {
|
u32 MiiManager::GetCount(SourceFlag source_flag) const {
|
||||||
u32 count{};
|
std::size_t count{};
|
||||||
if ((source_flag & SourceFlag::Database) != SourceFlag::None) {
|
if ((source_flag & SourceFlag::Database) != SourceFlag::None) {
|
||||||
// TODO(bunnei): We don't implement the Mii database, but when we do, update this
|
// TODO(bunnei): We don't implement the Mii database, but when we do, update this
|
||||||
count += 0;
|
count += 0;
|
||||||
|
@ -436,7 +436,7 @@ u32 MiiManager::GetCount(SourceFlag source_flag) const {
|
||||||
if ((source_flag & SourceFlag::Default) != SourceFlag::None) {
|
if ((source_flag & SourceFlag::Default) != SourceFlag::None) {
|
||||||
count += DefaultMiiCount;
|
count += DefaultMiiCount;
|
||||||
}
|
}
|
||||||
return count;
|
return static_cast<u32>(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultVal<MiiInfo> MiiManager::UpdateLatest([[maybe_unused]] const MiiInfo& info,
|
ResultVal<MiiInfo> MiiManager::UpdateLatest([[maybe_unused]] const MiiInfo& info,
|
||||||
|
|
|
@ -89,9 +89,9 @@ Network::Protocol Translate(Type type, Protocol protocol) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 TranslatePollEventsToHost(u16 flags) {
|
u16 TranslatePollEventsToHost(u32 flags) {
|
||||||
u16 result = 0;
|
u32 result = 0;
|
||||||
const auto translate = [&result, &flags](u16 from, u16 to) {
|
const auto translate = [&result, &flags](u32 from, u32 to) {
|
||||||
if ((flags & from) != 0) {
|
if ((flags & from) != 0) {
|
||||||
flags &= ~from;
|
flags &= ~from;
|
||||||
result |= to;
|
result |= to;
|
||||||
|
@ -105,12 +105,12 @@ u16 TranslatePollEventsToHost(u16 flags) {
|
||||||
translate(POLL_NVAL, Network::POLL_NVAL);
|
translate(POLL_NVAL, Network::POLL_NVAL);
|
||||||
|
|
||||||
UNIMPLEMENTED_IF_MSG(flags != 0, "Unimplemented flags={}", flags);
|
UNIMPLEMENTED_IF_MSG(flags != 0, "Unimplemented flags={}", flags);
|
||||||
return result;
|
return static_cast<u16>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 TranslatePollEventsToGuest(u16 flags) {
|
u16 TranslatePollEventsToGuest(u32 flags) {
|
||||||
u16 result = 0;
|
u32 result = 0;
|
||||||
const auto translate = [&result, &flags](u16 from, u16 to) {
|
const auto translate = [&result, &flags](u32 from, u32 to) {
|
||||||
if ((flags & from) != 0) {
|
if ((flags & from) != 0) {
|
||||||
flags &= ~from;
|
flags &= ~from;
|
||||||
result |= to;
|
result |= to;
|
||||||
|
@ -125,7 +125,7 @@ u16 TranslatePollEventsToGuest(u16 flags) {
|
||||||
translate(Network::POLL_NVAL, POLL_NVAL);
|
translate(Network::POLL_NVAL, POLL_NVAL);
|
||||||
|
|
||||||
UNIMPLEMENTED_IF_MSG(flags != 0, "Unimplemented flags={}", flags);
|
UNIMPLEMENTED_IF_MSG(flags != 0, "Unimplemented flags={}", flags);
|
||||||
return result;
|
return static_cast<u16>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
Network::SockAddrIn Translate(SockAddrIn value) {
|
Network::SockAddrIn Translate(SockAddrIn value) {
|
||||||
|
|
|
@ -31,10 +31,10 @@ Network::Type Translate(Type type);
|
||||||
Network::Protocol Translate(Type type, Protocol protocol);
|
Network::Protocol Translate(Type type, Protocol protocol);
|
||||||
|
|
||||||
/// Translate abstract poll event flags to guest poll event flags
|
/// Translate abstract poll event flags to guest poll event flags
|
||||||
u16 TranslatePollEventsToHost(u16 flags);
|
u16 TranslatePollEventsToHost(u32 flags);
|
||||||
|
|
||||||
/// Translate guest poll event flags to abstract poll event flags
|
/// Translate guest poll event flags to abstract poll event flags
|
||||||
u16 TranslatePollEventsToGuest(u16 flags);
|
u16 TranslatePollEventsToGuest(u32 flags);
|
||||||
|
|
||||||
/// Translate guest socket address structure to abstract socket address structure
|
/// Translate guest socket address structure to abstract socket address structure
|
||||||
Network::SockAddrIn Translate(SockAddrIn value);
|
Network::SockAddrIn Translate(SockAddrIn value);
|
||||||
|
|
|
@ -820,7 +820,10 @@ static ResultCode ToCalendarTimeImpl(const TimeZoneRule& rules, s64 time, Calend
|
||||||
const ResultCode result{
|
const ResultCode result{
|
||||||
ToCalendarTimeInternal(rules, time, calendar_time, calendar.additiona_info)};
|
ToCalendarTimeInternal(rules, time, calendar_time, calendar.additiona_info)};
|
||||||
calendar.time.year = static_cast<s16>(calendar_time.year);
|
calendar.time.year = static_cast<s16>(calendar_time.year);
|
||||||
calendar.time.month = calendar_time.month + 1; // Internal impl. uses 0-indexed month
|
|
||||||
|
// Internal impl. uses 0-indexed month
|
||||||
|
calendar.time.month = static_cast<s8>(calendar_time.month + 1);
|
||||||
|
|
||||||
calendar.time.day = calendar_time.day;
|
calendar.time.day = calendar_time.day;
|
||||||
calendar.time.hour = calendar_time.hour;
|
calendar.time.hour = calendar_time.hour;
|
||||||
calendar.time.minute = calendar_time.minute;
|
calendar.time.minute = calendar_time.minute;
|
||||||
|
@ -872,13 +875,15 @@ ResultCode TimeZoneManager::ToPosixTime(const TimeZoneRule& rules,
|
||||||
const CalendarTime& calendar_time, s64& posix_time) const {
|
const CalendarTime& calendar_time, s64& posix_time) const {
|
||||||
posix_time = 0;
|
posix_time = 0;
|
||||||
|
|
||||||
CalendarTimeInternal internal_time{};
|
CalendarTimeInternal internal_time{
|
||||||
internal_time.year = calendar_time.year;
|
.year = calendar_time.year,
|
||||||
internal_time.month = calendar_time.month - 1; // Internal impl. uses 0-indexed month
|
// Internal impl. uses 0-indexed month
|
||||||
internal_time.day = calendar_time.day;
|
.month = static_cast<s8>(calendar_time.month - 1),
|
||||||
internal_time.hour = calendar_time.hour;
|
.day = calendar_time.day,
|
||||||
internal_time.minute = calendar_time.minute;
|
.hour = calendar_time.hour,
|
||||||
internal_time.second = calendar_time.second;
|
.minute = calendar_time.minute,
|
||||||
|
.second = calendar_time.second,
|
||||||
|
};
|
||||||
|
|
||||||
s32 hour{internal_time.hour};
|
s32 hour{internal_time.hour};
|
||||||
s32 minute{internal_time.minute};
|
s32 minute{internal_time.minute};
|
||||||
|
|
|
@ -159,7 +159,7 @@ public:
|
||||||
header.data_size = static_cast<u32_le>(write_index - sizeof(Header));
|
header.data_size = static_cast<u32_le>(write_index - sizeof(Header));
|
||||||
header.data_offset = sizeof(Header);
|
header.data_offset = sizeof(Header);
|
||||||
header.objects_size = 4;
|
header.objects_size = 4;
|
||||||
header.objects_offset = sizeof(Header) + header.data_size;
|
header.objects_offset = static_cast<u32>(sizeof(Header) + header.data_size);
|
||||||
std::memcpy(buffer.data(), &header, sizeof(Header));
|
std::memcpy(buffer.data(), &header, sizeof(Header));
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace Loader {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
constexpr u32 PageAlignSize(u32 size) {
|
constexpr u32 PageAlignSize(u32 size) {
|
||||||
return (size + Core::Memory::PAGE_MASK) & ~Core::Memory::PAGE_MASK;
|
return static_cast<u32>((size + Core::Memory::PAGE_MASK) & ~Core::Memory::PAGE_MASK);
|
||||||
}
|
}
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@ FileType AppLoader_NRO::IdentifyType(const FileSys::VirtualFile& file) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr u32 PageAlignSize(u32 size) {
|
static constexpr u32 PageAlignSize(u32 size) {
|
||||||
return (size + Core::Memory::PAGE_MASK) & ~Core::Memory::PAGE_MASK;
|
return static_cast<u32>((size + Core::Memory::PAGE_MASK) & ~Core::Memory::PAGE_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool LoadNroImpl(Kernel::Process& process, const std::vector<u8>& data,
|
static bool LoadNroImpl(Kernel::Process& process, const std::vector<u8>& data,
|
||||||
|
|
|
@ -47,7 +47,7 @@ std::vector<u8> DecompressSegment(const std::vector<u8>& compressed_data,
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr u32 PageAlignSize(u32 size) {
|
constexpr u32 PageAlignSize(u32 size) {
|
||||||
return (size + Core::Memory::PAGE_MASK) & ~Core::Memory::PAGE_MASK;
|
return static_cast<u32>((size + Core::Memory::PAGE_MASK) & ~Core::Memory::PAGE_MASK);
|
||||||
}
|
}
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct NSOHeader {
|
||||||
static_assert(sizeof(NSOHeader) == 0x100, "NSOHeader has incorrect size.");
|
static_assert(sizeof(NSOHeader) == 0x100, "NSOHeader has incorrect size.");
|
||||||
static_assert(std::is_trivially_copyable_v<NSOHeader>, "NSOHeader must be trivially copyable.");
|
static_assert(std::is_trivially_copyable_v<NSOHeader>, "NSOHeader must be trivially copyable.");
|
||||||
|
|
||||||
constexpr u64 NSO_ARGUMENT_DATA_ALLOCATION_SIZE = 0x9000;
|
constexpr u32 NSO_ARGUMENT_DATA_ALLOCATION_SIZE = 0x9000;
|
||||||
|
|
||||||
struct NSOArgumentHeader {
|
struct NSOArgumentHeader {
|
||||||
u32_le allocated_size;
|
u32_le allocated_size;
|
||||||
|
|
|
@ -120,9 +120,9 @@ struct Memory::Impl {
|
||||||
if ((addr & 1) == 0) {
|
if ((addr & 1) == 0) {
|
||||||
return Read<u16_le>(addr);
|
return Read<u16_le>(addr);
|
||||||
} else {
|
} else {
|
||||||
const u8 a{Read<u8>(addr)};
|
const u32 a{Read<u8>(addr)};
|
||||||
const u8 b{Read<u8>(addr + sizeof(u8))};
|
const u32 b{Read<u8>(addr + sizeof(u8))};
|
||||||
return (static_cast<u16>(b) << 8) | a;
|
return static_cast<u16>((b << 8) | a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,9 +130,9 @@ struct Memory::Impl {
|
||||||
if ((addr & 3) == 0) {
|
if ((addr & 3) == 0) {
|
||||||
return Read<u32_le>(addr);
|
return Read<u32_le>(addr);
|
||||||
} else {
|
} else {
|
||||||
const u16 a{Read16(addr)};
|
const u32 a{Read16(addr)};
|
||||||
const u16 b{Read16(addr + sizeof(u16))};
|
const u32 b{Read16(addr + sizeof(u16))};
|
||||||
return (static_cast<u32>(b) << 16) | a;
|
return (b << 16) | a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -153,8 +153,9 @@ std::vector<CheatEntry> TextCheatParser::Parse(std::string_view data) const {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto value = static_cast<u32>(std::stoul(hex, nullptr, 0x10));
|
||||||
out[*current_entry].definition.opcodes[out[*current_entry].definition.num_opcodes++] =
|
out[*current_entry].definition.opcodes[out[*current_entry].definition.num_opcodes++] =
|
||||||
std::stoul(hex, nullptr, 0x10);
|
value;
|
||||||
|
|
||||||
i += 8;
|
i += 8;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -238,14 +238,14 @@ SockAddrIn TranslateToSockAddrIn(sockaddr input_) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 TranslatePollEvents(u16 events) {
|
u16 TranslatePollEvents(u32 events) {
|
||||||
u16 result = 0;
|
u32 result = 0;
|
||||||
|
|
||||||
if (events & POLL_IN) {
|
if ((events & POLL_IN) != 0) {
|
||||||
events &= ~POLL_IN;
|
events &= ~POLL_IN;
|
||||||
result |= POLLIN;
|
result |= POLLIN;
|
||||||
}
|
}
|
||||||
if (events & POLL_PRI) {
|
if ((events & POLL_PRI) != 0) {
|
||||||
events &= ~POLL_PRI;
|
events &= ~POLL_PRI;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
LOG_WARNING(Service, "Winsock doesn't support POLLPRI");
|
LOG_WARNING(Service, "Winsock doesn't support POLLPRI");
|
||||||
|
@ -253,20 +253,20 @@ u16 TranslatePollEvents(u16 events) {
|
||||||
result |= POLL_PRI;
|
result |= POLL_PRI;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (events & POLL_OUT) {
|
if ((events & POLL_OUT) != 0) {
|
||||||
events &= ~POLL_OUT;
|
events &= ~POLL_OUT;
|
||||||
result |= POLLOUT;
|
result |= POLLOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
UNIMPLEMENTED_IF_MSG(events != 0, "Unhandled guest events=0x{:x}", events);
|
UNIMPLEMENTED_IF_MSG(events != 0, "Unhandled guest events=0x{:x}", events);
|
||||||
|
|
||||||
return result;
|
return static_cast<u16>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 TranslatePollRevents(u16 revents) {
|
u16 TranslatePollRevents(u32 revents) {
|
||||||
u16 result = 0;
|
u32 result = 0;
|
||||||
const auto translate = [&result, &revents](int host, unsigned guest) {
|
const auto translate = [&result, &revents](u32 host, u32 guest) {
|
||||||
if (revents & host) {
|
if ((revents & host) != 0) {
|
||||||
revents &= ~host;
|
revents &= ~host;
|
||||||
result |= guest;
|
result |= guest;
|
||||||
}
|
}
|
||||||
|
@ -280,7 +280,7 @@ u16 TranslatePollRevents(u16 revents) {
|
||||||
|
|
||||||
UNIMPLEMENTED_IF_MSG(revents != 0, "Unhandled host revents=0x{:x}", revents);
|
UNIMPLEMENTED_IF_MSG(revents != 0, "Unhandled host revents=0x{:x}", revents);
|
||||||
|
|
||||||
return result;
|
return static_cast<u16>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -350,7 +350,7 @@ std::pair<s32, Errno> Poll(std::vector<PollFD>& pollfds, s32 timeout) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < num; ++i) {
|
for (size_t i = 0; i < num; ++i) {
|
||||||
pollfds[i].revents = TranslatePollRevents(host_pollfds[i].revents);
|
pollfds[i].revents = TranslatePollRevents(static_cast<u32>(host_pollfds[i].revents));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result > 0) {
|
if (result > 0) {
|
||||||
|
@ -408,7 +408,7 @@ std::pair<Socket::AcceptResult, Errno> Socket::Accept() {
|
||||||
|
|
||||||
Errno Socket::Connect(SockAddrIn addr_in) {
|
Errno Socket::Connect(SockAddrIn addr_in) {
|
||||||
const sockaddr host_addr_in = TranslateFromSockAddrIn(addr_in);
|
const sockaddr host_addr_in = TranslateFromSockAddrIn(addr_in);
|
||||||
if (connect(fd, &host_addr_in, sizeof(host_addr_in)) != INVALID_SOCKET) {
|
if (connect(fd, &host_addr_in, sizeof(host_addr_in)) != SOCKET_ERROR) {
|
||||||
return Errno::SUCCESS;
|
return Errno::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -503,10 +503,10 @@ std::pair<s32, Errno> Socket::Recv(int flags, std::vector<u8>& message) {
|
||||||
ASSERT(flags == 0);
|
ASSERT(flags == 0);
|
||||||
ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
|
ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
|
||||||
|
|
||||||
const int result =
|
const auto result =
|
||||||
recv(fd, reinterpret_cast<char*>(message.data()), static_cast<int>(message.size()), 0);
|
recv(fd, reinterpret_cast<char*>(message.data()), static_cast<int>(message.size()), 0);
|
||||||
if (result != SOCKET_ERROR) {
|
if (result != SOCKET_ERROR) {
|
||||||
return {result, Errno::SUCCESS};
|
return {static_cast<s32>(result), Errno::SUCCESS};
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (const int ec = LastError()) {
|
switch (const int ec = LastError()) {
|
||||||
|
@ -531,14 +531,14 @@ std::pair<s32, Errno> Socket::RecvFrom(int flags, std::vector<u8>& message, Sock
|
||||||
socklen_t* const p_addrlen = addr ? &addrlen : nullptr;
|
socklen_t* const p_addrlen = addr ? &addrlen : nullptr;
|
||||||
sockaddr* const p_addr_in = addr ? &addr_in : nullptr;
|
sockaddr* const p_addr_in = addr ? &addr_in : nullptr;
|
||||||
|
|
||||||
const int result = recvfrom(fd, reinterpret_cast<char*>(message.data()),
|
const auto result = recvfrom(fd, reinterpret_cast<char*>(message.data()),
|
||||||
static_cast<int>(message.size()), 0, p_addr_in, p_addrlen);
|
static_cast<int>(message.size()), 0, p_addr_in, p_addrlen);
|
||||||
if (result != SOCKET_ERROR) {
|
if (result != SOCKET_ERROR) {
|
||||||
if (addr) {
|
if (addr) {
|
||||||
ASSERT(addrlen == sizeof(addr_in));
|
ASSERT(addrlen == sizeof(addr_in));
|
||||||
*addr = TranslateToSockAddrIn(addr_in);
|
*addr = TranslateToSockAddrIn(addr_in);
|
||||||
}
|
}
|
||||||
return {result, Errno::SUCCESS};
|
return {static_cast<s32>(result), Errno::SUCCESS};
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (const int ec = LastError()) {
|
switch (const int ec = LastError()) {
|
||||||
|
@ -558,10 +558,10 @@ std::pair<s32, Errno> Socket::Send(const std::vector<u8>& message, int flags) {
|
||||||
ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
|
ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
|
||||||
ASSERT(flags == 0);
|
ASSERT(flags == 0);
|
||||||
|
|
||||||
const int result = send(fd, reinterpret_cast<const char*>(message.data()),
|
const auto result = send(fd, reinterpret_cast<const char*>(message.data()),
|
||||||
static_cast<int>(message.size()), 0);
|
static_cast<int>(message.size()), 0);
|
||||||
if (result != SOCKET_ERROR) {
|
if (result != SOCKET_ERROR) {
|
||||||
return {result, Errno::SUCCESS};
|
return {static_cast<s32>(result), Errno::SUCCESS};
|
||||||
}
|
}
|
||||||
|
|
||||||
const int ec = LastError();
|
const int ec = LastError();
|
||||||
|
@ -591,10 +591,10 @@ std::pair<s32, Errno> Socket::SendTo(u32 flags, const std::vector<u8>& message,
|
||||||
to = &host_addr_in;
|
to = &host_addr_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int result = sendto(fd, reinterpret_cast<const char*>(message.data()),
|
const auto result = sendto(fd, reinterpret_cast<const char*>(message.data()),
|
||||||
static_cast<int>(message.size()), 0, to, tolen);
|
static_cast<int>(message.size()), 0, to, tolen);
|
||||||
if (result != SOCKET_ERROR) {
|
if (result != SOCKET_ERROR) {
|
||||||
return {result, Errno::SUCCESS};
|
return {static_cast<s32>(result), Errno::SUCCESS};
|
||||||
}
|
}
|
||||||
|
|
||||||
const int ec = LastError();
|
const int ec = LastError();
|
||||||
|
|
|
@ -67,28 +67,25 @@ struct Client::Impl {
|
||||||
const std::string& jwt = "", const std::string& username = "",
|
const std::string& jwt = "", const std::string& username = "",
|
||||||
const std::string& token = "") {
|
const std::string& token = "") {
|
||||||
if (cli == nullptr) {
|
if (cli == nullptr) {
|
||||||
auto parsedUrl = LUrlParser::clParseURL::ParseURL(host);
|
const auto parsedUrl = LUrlParser::clParseURL::ParseURL(host);
|
||||||
int port;
|
int port{};
|
||||||
if (parsedUrl.m_Scheme == "http") {
|
if (parsedUrl.m_Scheme == "http") {
|
||||||
if (!parsedUrl.GetPort(&port)) {
|
if (!parsedUrl.GetPort(&port)) {
|
||||||
port = HTTP_PORT;
|
port = HTTP_PORT;
|
||||||
}
|
}
|
||||||
cli = std::make_unique<httplib::Client>(parsedUrl.m_Host.c_str(), port);
|
|
||||||
} else if (parsedUrl.m_Scheme == "https") {
|
} else if (parsedUrl.m_Scheme == "https") {
|
||||||
if (!parsedUrl.GetPort(&port)) {
|
if (!parsedUrl.GetPort(&port)) {
|
||||||
port = HTTPS_PORT;
|
port = HTTPS_PORT;
|
||||||
}
|
}
|
||||||
cli = std::make_unique<httplib::SSLClient>(parsedUrl.m_Host.c_str(), port);
|
|
||||||
} else {
|
} else {
|
||||||
LOG_ERROR(WebService, "Bad URL scheme {}", parsedUrl.m_Scheme);
|
LOG_ERROR(WebService, "Bad URL scheme {}", parsedUrl.m_Scheme);
|
||||||
return WebResult{WebResult::Code::InvalidURL, "Bad URL scheme", ""};
|
return WebResult{WebResult::Code::InvalidURL, "Bad URL scheme", ""};
|
||||||
}
|
}
|
||||||
|
cli = std::make_unique<httplib::Client>(parsedUrl.m_Host.c_str(), port);
|
||||||
}
|
}
|
||||||
if (cli == nullptr) {
|
cli->set_connection_timeout(TIMEOUT_SECONDS);
|
||||||
LOG_ERROR(WebService, "Invalid URL {}", host + path);
|
cli->set_read_timeout(TIMEOUT_SECONDS);
|
||||||
return WebResult{WebResult::Code::InvalidURL, "Invalid URL", ""};
|
cli->set_write_timeout(TIMEOUT_SECONDS);
|
||||||
}
|
|
||||||
cli->set_timeout_sec(TIMEOUT_SECONDS);
|
|
||||||
|
|
||||||
httplib::Headers params;
|
httplib::Headers params;
|
||||||
if (!jwt.empty()) {
|
if (!jwt.empty()) {
|
||||||
|
|
Reference in New Issue