Clear PreopenList on every populate call
This commit is contained in:
parent
07a968b344
commit
81d824bf80
@ -71,7 +71,16 @@ pub const PreopenList = struct {
|
|||||||
|
|
||||||
/// Populate the list with the preopens by issuing `std.os.wasi.fd_prestat_get`
|
/// Populate the list with the preopens by issuing `std.os.wasi.fd_prestat_get`
|
||||||
/// and `std.os.wasi.fd_prestat_dir_name` syscalls to the runtime.
|
/// and `std.os.wasi.fd_prestat_dir_name` syscalls to the runtime.
|
||||||
|
///
|
||||||
|
/// If called more than once, it will clear its contents every time before
|
||||||
|
/// issuing the syscalls.
|
||||||
pub fn populate(self: *Self) Error!void {
|
pub fn populate(self: *Self) Error!void {
|
||||||
|
// Clear contents if we're being called again
|
||||||
|
for (self.toOwnedSlice()) |preopen| {
|
||||||
|
switch (preopen.@"type") {
|
||||||
|
PreopenType.Dir => |path| self.buffer.allocator.free(path),
|
||||||
|
}
|
||||||
|
}
|
||||||
errdefer self.deinit();
|
errdefer self.deinit();
|
||||||
var fd: fd_t = 3; // start fd has to be beyond stdio fds
|
var fd: fd_t = 3; // start fd has to be beyond stdio fds
|
||||||
|
|
||||||
@ -123,6 +132,11 @@ pub const PreopenList = struct {
|
|||||||
pub fn asSlice(self: *const Self) []const Preopen {
|
pub fn asSlice(self: *const Self) []const Preopen {
|
||||||
return self.buffer.items;
|
return self.buffer.items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The caller owns the returned memory. ArrayList becomes empty.
|
||||||
|
pub fn toOwnedSlice(self: *Self) []Preopen {
|
||||||
|
return self.buffer.toOwnedSlice();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Convenience wrapper for `std.os.wasi.path_open` syscall.
|
/// Convenience wrapper for `std.os.wasi.path_open` syscall.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user