From 4c172cff70db9e16b3b0e04c84da0af68df200f5 Mon Sep 17 00:00:00 2001 From: Rekai Musuka Date: Tue, 22 Mar 2022 14:54:37 -0300 Subject: [PATCH] fix: account for subset of disallowed chars in save file names --- src/bus/backup.zig | 5 +++-- src/util.zig | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/bus/backup.zig b/src/bus/backup.zig index 929f8eb..0ba3987 100644 --- a/src/bus/backup.zig +++ b/src/bus/backup.zig @@ -3,6 +3,7 @@ const Allocator = std.mem.Allocator; const log = std.log.scoped(.Backup); const correctTitle = @import("../util.zig").correctTitle; +const safeTitle = @import("../util.zig").safeTitle; const backup_kinds = [5]Needle{ .{ .str = "EEPROM_V", .kind = .Eeprom }, @@ -61,7 +62,7 @@ pub const Backup = struct { } pub fn deinit(self: Self) void { - if (self.save_path) |path| self.writeSaveToDisk(path) catch |e| log.err("Failed to save {}", .{e}); + if (self.save_path) |path| self.writeSaveToDisk(path) catch |e| log.err("Failed to write save: {}", .{e}); self.alloc.free(self.buf); } @@ -93,7 +94,7 @@ pub const Backup = struct { } fn getSaveFilename(self: *const Self) ![]const u8 { - const title = correctTitle(self.title); + const title = correctTitle(safeTitle(self.title)); return try std.mem.concat(self.alloc, u8, &[_][]const u8{ title, ".sav" }); } diff --git a/src/util.zig b/src/util.zig index f8e4bcb..a68e78a 100644 --- a/src/util.zig +++ b/src/util.zig @@ -74,12 +74,12 @@ pub fn correctTitle(title: [12]u8) []const u8 { /// Copies a Title and returns either an identical or similar /// array consisting of ASCII that won't make any file system angry /// -/// Currently Unused but I assume there's some ROM out there that will require this +/// e.g. POKEPIN R/S to POKEPIN R_S pub fn safeTitle(title: [12]u8) [12]u8 { var result: [12]u8 = title; for (result) |*char| { - if (char.* == '-') char.* = '_'; + if (char.* == '/' or char.* == '\\') char.* = '_'; if (char.* == 0) break; }