Update library directories and improve string handling in source files
- Added 'absl::numeric' to the AdditionalLibraryDirectories in yaze.vcxproj for enhanced functionality. - Refactored string handling in multiple source files to use std::strncpy for safer string copying and prevent buffer overflows. - Cleaned up unnecessary whitespace and improved code readability across various files.
This commit is contained in:
@@ -276,7 +276,7 @@ std::vector<std::string> FileDialogWrapper::GetSubdirectoriesInFolder(
|
|||||||
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
|
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
|
||||||
if (strcmp(findFileData.cFileName, ".") != 0 &&
|
if (strcmp(findFileData.cFileName, ".") != 0 &&
|
||||||
strcmp(findFileData.cFileName, "..") != 0) {
|
strcmp(findFileData.cFileName, "..") != 0) {
|
||||||
subdirectories.push_back(findFileData.cFileName);
|
subdirectories.emplace_back(findFileData.cFileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (FindNextFile(hFind, &findFileData) != 0);
|
} while (FindNextFile(hFind, &findFileData) != 0);
|
||||||
@@ -293,7 +293,7 @@ std::vector<std::string> FileDialogWrapper::GetFilesInFolder(
|
|||||||
if (hFind != INVALID_HANDLE_VALUE) {
|
if (hFind != INVALID_HANDLE_VALUE) {
|
||||||
do {
|
do {
|
||||||
if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
|
if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
|
||||||
files.push_back(findFileData.cFileName);
|
files.emplace_back(findFileData.cFileName);
|
||||||
}
|
}
|
||||||
} while (FindNextFile(hFind, &findFileData) != 0);
|
} while (FindNextFile(hFind, &findFileData) != 0);
|
||||||
FindClose(hFind);
|
FindClose(hFind);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "dungeon_object_selector.h"
|
#include "dungeon_object_selector.h"
|
||||||
|
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
#include "app/core/window.h"
|
#include "app/core/window.h"
|
||||||
#include "app/gfx/arena.h"
|
#include "app/gfx/arena.h"
|
||||||
@@ -1045,7 +1046,8 @@ void DungeonObjectSelector::DrawCompactPropertiesEditor() {
|
|||||||
static int music_id = 0;
|
static int music_id = 0;
|
||||||
|
|
||||||
// Copy current values
|
// Copy current values
|
||||||
strncpy(room_name, properties.name.c_str(), sizeof(room_name) - 1);
|
std::strncpy(room_name, properties.name.c_str(), sizeof(room_name) - 1);
|
||||||
|
room_name[sizeof(room_name) - 1] = '\0';
|
||||||
dungeon_id = properties.dungeon_id;
|
dungeon_id = properties.dungeon_id;
|
||||||
floor_level = properties.floor_level;
|
floor_level = properties.floor_level;
|
||||||
is_boss_room = properties.is_boss_room;
|
is_boss_room = properties.is_boss_room;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "editor_manager.h"
|
#include "editor_manager.h"
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
#include "absl/status/status.h"
|
#include "absl/status/status.h"
|
||||||
#include "absl/strings/match.h"
|
#include "absl/strings/match.h"
|
||||||
@@ -2253,7 +2254,8 @@ void EditorManager::DrawSessionSwitcher() {
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Rename")) {
|
if (ImGui::Button("Rename")) {
|
||||||
session_to_rename_ = i;
|
session_to_rename_ = i;
|
||||||
strncpy(session_rename_buffer_, session.GetDisplayName().c_str(), sizeof(session_rename_buffer_) - 1);
|
std::strncpy(session_rename_buffer_, session.GetDisplayName().c_str(), sizeof(session_rename_buffer_) - 1);
|
||||||
|
session_rename_buffer_[sizeof(session_rename_buffer_) - 1] = '\0';
|
||||||
show_session_rename_dialog_ = true;
|
show_session_rename_dialog_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2429,7 +2431,8 @@ void EditorManager::DrawSessionManager() {
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Rename")) {
|
if (ImGui::Button("Rename")) {
|
||||||
session_to_rename_ = i;
|
session_to_rename_ = i;
|
||||||
strncpy(session_rename_buffer_, session.GetDisplayName().c_str(), sizeof(session_rename_buffer_) - 1);
|
std::strncpy(session_rename_buffer_, session.GetDisplayName().c_str(), sizeof(session_rename_buffer_) - 1);
|
||||||
|
session_rename_buffer_[sizeof(session_rename_buffer_) - 1] = '\0';
|
||||||
show_session_rename_dialog_ = true;
|
show_session_rename_dialog_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
#include "absl/strings/str_format.h"
|
#include "absl/strings/str_format.h"
|
||||||
#include "absl/strings/str_split.h"
|
#include "absl/strings/str_split.h"
|
||||||
@@ -1777,9 +1778,12 @@ void ThemeManager::ShowSimpleThemeEditor(bool* p_open) {
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button("Reset to Current")) {
|
if (ImGui::Button("Reset to Current")) {
|
||||||
edit_theme = current_theme_;
|
edit_theme = current_theme_;
|
||||||
strncpy(theme_name, current_theme_.name.c_str(), sizeof(theme_name));
|
std::strncpy(theme_name, current_theme_.name.c_str(), sizeof(theme_name) - 1);
|
||||||
strncpy(theme_description, current_theme_.description.c_str(), sizeof(theme_description));
|
theme_name[sizeof(theme_name) - 1] = '\0';
|
||||||
strncpy(theme_author, current_theme_.author.c_str(), sizeof(theme_author));
|
std::strncpy(theme_description, current_theme_.description.c_str(), sizeof(theme_description) - 1);
|
||||||
|
theme_description[sizeof(theme_description) - 1] = '\0';
|
||||||
|
std::strncpy(theme_author, current_theme_.author.c_str(), sizeof(theme_author) - 1);
|
||||||
|
theme_author[sizeof(theme_author) - 1] = '\0';
|
||||||
|
|
||||||
// Reset backup state since we're back to current theme
|
// Reset backup state since we're back to current theme
|
||||||
if (theme_backup_made) {
|
if (theme_backup_made) {
|
||||||
|
|||||||
32
src/yaze.cc
32
src/yaze.cc
@@ -1,9 +1,9 @@
|
|||||||
#include "yaze.h"
|
#include "yaze.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <cstring>
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#include "app/core/controller.h"
|
#include "app/core/controller.h"
|
||||||
@@ -191,10 +191,7 @@ int yaze_save_rom(zelda3_rom* rom, const char* filename) {
|
|||||||
|
|
||||||
auto* internal_rom = static_cast<yaze::Rom*>(rom->impl);
|
auto* internal_rom = static_cast<yaze::Rom*>(rom->impl);
|
||||||
auto status = internal_rom->SaveToFile(yaze::Rom::SaveSettings{
|
auto status = internal_rom->SaveToFile(yaze::Rom::SaveSettings{
|
||||||
.backup = true,
|
.backup = true, .save_new = false, .filename = filename});
|
||||||
.save_new = false,
|
|
||||||
.filename = filename
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!status.ok()) {
|
if (!status.ok()) {
|
||||||
return YAZE_ERROR_IO;
|
return YAZE_ERROR_IO;
|
||||||
@@ -266,7 +263,8 @@ zelda3_dungeon_room *yaze_load_all_rooms(const zelda3_rom *rom) {
|
|||||||
return rooms;
|
return rooms;
|
||||||
}
|
}
|
||||||
|
|
||||||
yaze_status yaze_load_messages(const zelda3_rom* rom, zelda3_message** messages, int* message_count) {
|
yaze_status yaze_load_messages(const zelda3_rom* rom, zelda3_message** messages,
|
||||||
|
int* message_count) {
|
||||||
if (rom == nullptr || messages == nullptr || message_count == nullptr) {
|
if (rom == nullptr || messages == nullptr || message_count == nullptr) {
|
||||||
return YAZE_ERROR_INVALID_ARG;
|
return YAZE_ERROR_INVALID_ARG;
|
||||||
}
|
}
|
||||||
@@ -294,7 +292,9 @@ yaze_status yaze_load_messages(const zelda3_rom* rom, zelda3_message** messages,
|
|||||||
std::memcpy((*messages)[i].raw_data, msg.Data.data(), msg.Data.size());
|
std::memcpy((*messages)[i].raw_data, msg.Data.data(), msg.Data.size());
|
||||||
|
|
||||||
(*messages)[i].parsed_text = new char[msg.ContentsParsed.length() + 1];
|
(*messages)[i].parsed_text = new char[msg.ContentsParsed.length() + 1];
|
||||||
std::strcpy((*messages)[i].parsed_text, msg.ContentsParsed.c_str());
|
std::strncpy((*messages)[i].parsed_text, msg.ContentsParsed.c_str(),
|
||||||
|
msg.ContentsParsed.length());
|
||||||
|
(*messages)[i].parsed_text[msg.ContentsParsed.length()] = '\0';
|
||||||
|
|
||||||
(*messages)[i].is_compressed = false; // TODO: Detect compression
|
(*messages)[i].is_compressed = false; // TODO: Detect compression
|
||||||
(*messages)[i].encoding_type = 0; // TODO: Detect encoding
|
(*messages)[i].encoding_type = 0; // TODO: Detect encoding
|
||||||
@@ -322,7 +322,8 @@ void yaze_free_bitmap(yaze_bitmap* bitmap) {
|
|||||||
yaze_bitmap yaze_create_bitmap(int width, int height, uint8_t bpp) {
|
yaze_bitmap yaze_create_bitmap(int width, int height, uint8_t bpp) {
|
||||||
yaze_bitmap bitmap = {};
|
yaze_bitmap bitmap = {};
|
||||||
|
|
||||||
if (width <= 0 || height <= 0 || (bpp != 1 && bpp != 2 && bpp != 4 && bpp != 8)) {
|
if (width <= 0 || height <= 0 ||
|
||||||
|
(bpp != 1 && bpp != 2 && bpp != 4 && bpp != 8)) {
|
||||||
return bitmap; // Return empty bitmap on invalid args
|
return bitmap; // Return empty bitmap on invalid args
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,10 +343,14 @@ snes_color yaze_rgb_to_snes_color(uint8_t r, uint8_t g, uint8_t b) {
|
|||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void yaze_snes_color_to_rgb(snes_color color, uint8_t* r, uint8_t* g, uint8_t* b) {
|
void yaze_snes_color_to_rgb(snes_color color, uint8_t* r, uint8_t* g,
|
||||||
if (r != nullptr) *r = static_cast<uint8_t>(color.red);
|
uint8_t* b) {
|
||||||
if (g != nullptr) *g = static_cast<uint8_t>(color.green);
|
if (r != nullptr)
|
||||||
if (b != nullptr) *b = static_cast<uint8_t>(color.blue);
|
*r = static_cast<uint8_t>(color.red);
|
||||||
|
if (g != nullptr)
|
||||||
|
*g = static_cast<uint8_t>(color.green);
|
||||||
|
if (b != nullptr)
|
||||||
|
*b = static_cast<uint8_t>(color.blue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Version detection functions
|
// Version detection functions
|
||||||
@@ -375,7 +380,8 @@ const char* zelda3_version_to_string(zelda3_version version) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const zelda3_version_pointers* zelda3_get_version_pointers(zelda3_version version) {
|
const zelda3_version_pointers* zelda3_get_version_pointers(
|
||||||
|
zelda3_version version) {
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case ZELDA3_VERSION_US:
|
case ZELDA3_VERSION_US:
|
||||||
return &zelda3_us_pointers;
|
return &zelda3_us_pointers;
|
||||||
|
|||||||
@@ -146,7 +146,7 @@
|
|||||||
<AdditionalDependencies Condition="'$(VcpkgEnabled)' == 'true'">SDL2.lib;SDL2main.lib;zlibd.lib;libpng16d.lib;ws2_32.lib;winmm.lib;imm32.lib;version.lib;oleaut32.lib;ole32.lib;setupapi.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies Condition="'$(VcpkgEnabled)' == 'true'">SDL2.lib;SDL2main.lib;zlibd.lib;libpng16d.lib;ws2_32.lib;winmm.lib;imm32.lib;version.lib;oleaut32.lib;ole32.lib;setupapi.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalDependencies Condition="'$(VcpkgEnabled)' != 'true'">SDL2.lib;SDL2main.lib;ws2_32.lib;winmm.lib;imm32.lib;version.lib;oleaut32.lib;ole32.lib;setupapi.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies Condition="'$(VcpkgEnabled)' != 'true'">SDL2.lib;SDL2main.lib;ws2_32.lib;winmm.lib;imm32.lib;version.lib;oleaut32.lib;ole32.lib;setupapi.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories Condition="'$(VcpkgEnabled)' == 'true'">$(VcpkgRoot)installed\x64-windows\debug\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories Condition="'$(VcpkgEnabled)' == 'true'">$(VcpkgRoot)installed\x64-windows\debug\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalLibraryDirectories Condition="'$(VcpkgEnabled)' != 'true'">src\lib\SDL\VisualC\SDL\$(PlatformName)\$(Configuration);src\lib\abseil-cpp\absl\base;src\lib\abseil-cpp\absl\strings;src\lib\abseil-cpp\absl\container;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories Condition="'$(VcpkgEnabled)' != 'true'">src\lib\SDL\VisualC\SDL\$(PlatformName)\$(Configuration);src\lib\abseil-cpp\absl\base;src\lib\abseil-cpp\absl\strings;src\lib\abseil-cpp\absl\container;src\lib\abseil-cpp\absl\numeric;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Command>copy "$(ProjectDir)src\yaze_config.h.in" "$(ProjectDir)yaze_config.h"
|
<Command>copy "$(ProjectDir)src\yaze_config.h.in" "$(ProjectDir)yaze_config.h"
|
||||||
@@ -182,7 +182,7 @@ if exist "$(ProjectDir)zelda3.sfc" copy /Y "$(ProjectDir)zelda3.sfc" "$(OutDir)"
|
|||||||
<AdditionalDependencies Condition="'$(VcpkgEnabled)' == 'true'">SDL2.lib;SDL2main.lib;zlib.lib;libpng16.lib;ws2_32.lib;winmm.lib;imm32.lib;version.lib;oleaut32.lib;ole32.lib;setupapi.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies Condition="'$(VcpkgEnabled)' == 'true'">SDL2.lib;SDL2main.lib;zlib.lib;libpng16.lib;ws2_32.lib;winmm.lib;imm32.lib;version.lib;oleaut32.lib;ole32.lib;setupapi.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalDependencies Condition="'$(VcpkgEnabled)' != 'true'">SDL2.lib;SDL2main.lib;ws2_32.lib;winmm.lib;imm32.lib;version.lib;oleaut32.lib;ole32.lib;setupapi.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies Condition="'$(VcpkgEnabled)' != 'true'">SDL2.lib;SDL2main.lib;ws2_32.lib;winmm.lib;imm32.lib;version.lib;oleaut32.lib;ole32.lib;setupapi.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories Condition="'$(VcpkgEnabled)' == 'true'">$(VcpkgRoot)installed\x64-windows\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories Condition="'$(VcpkgEnabled)' == 'true'">$(VcpkgRoot)installed\x64-windows\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalLibraryDirectories Condition="'$(VcpkgEnabled)' != 'true'">src\lib\SDL\VisualC\SDL\$(PlatformName)\$(Configuration);src\lib\abseil-cpp\absl\base;src\lib\abseil-cpp\absl\strings;src\lib\abseil-cpp\absl\container;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories Condition="'$(VcpkgEnabled)' != 'true'">src\lib\SDL\VisualC\SDL\$(PlatformName)\$(Configuration);src\lib\abseil-cpp\absl\base;src\lib\abseil-cpp\absl\strings;src\lib\abseil-cpp\absl\container;src\lib\abseil-cpp\absl\numeric;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Command>copy "$(ProjectDir)src\yaze_config.h.in" "$(ProjectDir)yaze_config.h"
|
<Command>copy "$(ProjectDir)src\yaze_config.h.in" "$(ProjectDir)yaze_config.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user