summaryrefslogtreecommitdiff
path: root/src/recent.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/recent.zig')
-rw-r--r--src/recent.zig17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/recent.zig b/src/recent.zig
index 91c0afeb..112cb59f 100644
--- a/src/recent.zig
+++ b/src/recent.zig
@@ -83,6 +83,23 @@ pub const List = struct {
l.dirty = true;
}
+ /// A copy, for the session a Restore makes: its files closed until it
+ /// opens them again. Out of memory, what was copied so far.
+ pub fn clone(l: *const List, gpa: std.mem.Allocator) List {
+ var copy: List = .{ .dirty = true };
+ for (l.entries.items) |e| {
+ const path = gpa.dupe(u8, e.path) catch break;
+ var kept = e;
+ kept.path = path;
+ kept.open = false;
+ copy.entries.append(gpa, kept) catch {
+ gpa.free(path);
+ break;
+ };
+ }
+ return copy;
+ }
+
pub fn get(l: *const List, path: []const u8) ?Entry {
return l.entries.items[l.find(path) orelse return null];
}