refactor: namespace: leverage errors::ext::swallow where easily applicable

This commit is contained in:
2024-08-30 12:42:28 +00:00
parent 29cabd2ac4
commit e5263915b9
2 changed files with 26 additions and 17 deletions

View File

@@ -3,9 +3,10 @@ use fmt;
use fs;
use log;
use os::exec;
use path;
use rt;
export type error = (fs::error | os::exec::error | rt::errno);
export type error = (fs::error | os::exec::error | path::error | rt::errno);
// stringify an error. return value is statically allocated, no need to free.
export fn maybe_strerror(what: (void | ...error)) (void | str) = {
@@ -13,6 +14,7 @@ export fn maybe_strerror(what: (void | ...error)) (void | str) = {
return match (what) {
case let e: fs::error => yield fs::strerror(e);
case let e: os::exec::error => yield os::exec::strerror(e);
case let e: path::error => yield path::strerror(e);
case let e: rt::errno =>
// N.B.: this panics if the buffer is too small.
yield fmt::bsprintf(errorbuf[..], "{}: {}", rt::errname(e), rt::strerror(e));
@@ -27,19 +29,30 @@ export fn strerror(what: error) str = {
};
};
export fn check(context: str, what: (void | ...error)) void = {
export fn check(context: str, what: (void | ...error), fmt_args: fmt::field...) void = {
let context_buf: [4096]u8 = [0...];
match (maybe_strerror(what)) {
case let s: str => log::fatalf("{}: {}", context, s);
// N.B.: use `fatal(...)` over `fatalf("{}: {}")` so that my treelogger
// can extract the context.
case let errstr: str => log::fatal(
fmt::bsprintf(context_buf[..], context, fmt_args...),
":",
errstr,
);
case void => void;
};
};
export fn swallow(context: str, what: (void | ...error)) void = {
export fn swallow(context: str, what: (void | ...error), fmt_args: fmt::field...) void = {
let context_buf: [4096]u8 = [0...];
match (maybe_strerror(what)) {
case let s: str =>
// N.B.: use `println(...)` over `printfln("{}: {}")` so that my treelogger
// can extract the context.
log::println(context, ":", s);
case let errstr: str => log::println(
fmt::bsprintf(context_buf[..], context, fmt_args...),
":",
errstr,
);
case void => void;
};
};

View File

@@ -202,15 +202,11 @@ fn bind_leaf(old_fs: *fs::fs, new_fs: *fs::fs, user_path: *path::buffer) void =
yield other;
};
match (bind_component(old_fs, new_fs, cur_strpath, path::iterrem(&it))) {
case let e: fs::error =>
log::printfln("[namespace] unable to copy intermediate path {} of {}: {}", cur_strpath, path_str, fs::strerror(e));
return;
case let e: path::error =>
log::printfln("[namespace] unable to copy intermediate path {} of {}: {}", cur_strpath, path_str, path::strerror(e));
return;
case void => void;
};
errors::ext::swallow(
"[namespace] unable to copy intermediate path {} of {}",
bind_component(old_fs, new_fs, cur_strpath, path::iterrem(&it)),
cur_strpath, path_str
);
};
// and now, perform the actual bind mount: