fix: allocate and free entry.name in open_recent_project palette

This commit is contained in:
CJ van den Berg 2024-08-19 22:52:19 +02:00
parent bd27db46d1
commit 67ffff4caa
2 changed files with 9 additions and 3 deletions

View file

@ -20,16 +20,20 @@ pub const Match = struct {
matches: []const usize, matches: []const usize,
}; };
pub fn deinit(palette: *Type) void {
for (palette.entries.items) |entry|
palette.a.free(entry.name);
}
pub fn load_entries(palette: *Type) !void { pub fn load_entries(palette: *Type) !void {
const rsp = try project_manager.request_recent_projects(palette.a); const rsp = try project_manager.request_recent_projects(palette.a);
defer palette.a.free(rsp.buf);
var iter: []const u8 = rsp.buf; var iter: []const u8 = rsp.buf;
var len = try cbor.decodeArrayHeader(&iter); var len = try cbor.decodeArrayHeader(&iter);
while (len > 0) : (len -= 1) { while (len > 0) : (len -= 1) {
var name: []const u8 = undefined; var name: []const u8 = undefined;
if (try cbor.matchValue(&iter, cbor.extract(&name))) { if (try cbor.matchValue(&iter, cbor.extract(&name))) {
(palette.entries.addOne() catch @panic("oom")).* = .{ (try palette.entries.addOne()).* = .{ .name = try palette.a.dupe(u8, name) };
.name = name,
};
} else return error.InvalidMessageField; } else return error.InvalidMessageField;
} }
} }

View file

@ -89,6 +89,8 @@ pub fn Create(options: type) type {
pub fn deinit(self: *Self) void { pub fn deinit(self: *Self) void {
self.commands.deinit(); self.commands.deinit();
if (@hasDecl(options, "deinit"))
options.deinit(self);
self.entries.deinit(); self.entries.deinit();
tui.current().message_filters.remove_ptr(self); tui.current().message_filters.remove_ptr(self);
if (tui.current().mainview.dynamic_cast(mainview)) |mv| if (tui.current().mainview.dynamic_cast(mainview)) |mv|