Compare commits

...

12 Commits

Author SHA1 Message Date
lizzie 8c96d59e4b fix some dumb mods 2026-09-03 00:46:19 +00:00
lizzie 018210b756 ok fix for realsies 2026-09-02 23:30:50 +00:00
lizzie 4fc754a5b7 fuix2 2026-09-02 22:52:34 +00:00
lizzie 0b9770764f negative fix 2026-09-02 22:52:34 +00:00
lizzie 3f6e73290f rework to be better pointer logic 2026-09-02 22:52:34 +00:00
lizzie a4184b440f fix negative pointers 2026-09-02 22:52:34 +00:00
lizzie 367884e453 fumbling sv ctor again 2026-09-02 22:52:34 +00:00
lizzie f7a09f04dd me when messup 2026-09-02 22:52:34 +00:00
lizzie 5581da1fb6 fuck windows 2026-09-02 22:52:34 +00:00
lizzie b58a265336 fix sv construct 2026-09-02 22:52:34 +00:00
lizzie d8832cef70 fix tomo again 2026-09-02 22:52:34 +00:00
lizzie f86995a3b4 [ips_layer] fix TLTD 60 FPS mod specifically
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2026-09-02 22:52:34 +00:00
+12 -5
View File
@@ -120,7 +120,7 @@ std::array<u8, 32> IPSwitchCompiler::GetBuildID() const {
static IPSwitchRecord EscapeStringSequences(std::string_view sv) {
IPSwitchRecord r{};
for (auto it = sv.cbegin(); it != sv.cend(); ) {
for (auto it = sv.cbegin(); it < sv.cend(); ) {
if (*it == '\\' && it + 1 < sv.cend()) {
switch (it[1]) {
case 'a': r.data[r.count] = '\a'; break;
@@ -198,6 +198,8 @@ void IPSwitchCompiler::Parse(std::span<u8 const> bytes) {
LOG_WARNING(Loader, "Unknown flag {}", line);
break;
}
} else if (patches.empty()) {
LOG_WARNING(Loader, "Invalid line not in a patch {}", line);
} else {
size_t offset = size_t(std::strtoul(line.data(), nullptr, 16));
offset += size_t(offset_shift);
@@ -253,25 +255,30 @@ void IPSwitchCompiler::Parse(std::span<u8 const> bytes) {
// now make a nominal preprocessed line: remove comments
char quote = '\0';
auto const sline_start = p;
auto last_char = p;
for (; p < sline.cend(); ) {
// we dont check for "//", IPS checks for '/' only...
if ((!quote && p[0] == '/')
if (std::isspace(*p)) {
++p;
} else if ((!quote && p[0] == '/')
|| (!quote && p[0] == '#')) {
break;
} else if (p[0] == '\"' || p[0] == '\'') {
quote = (p[0] == quote) ? '\0' : p[0];
++p;
last_char = p;
} else if (p + 1 < sline.cend() && p[0] == '\\') {
p += 2;
last_char = p;
} else {
++p;
last_char = p;
}
}
// now we have the preprocessed string ;)
std::string_view pp_str(sline_start, p);
if (pp_str.size() > 0 && !parse_line(pp_str)) {
std::string_view const pp_str(sline_start, last_char);
if (pp_str.size() > 0 && !parse_line(pp_str))
break;
}
}
}
}