commit: ca7c71ba82abfdfa5fa2fdf4632bf6d50d10148f
parent ebb57991a8746d444a60aa152575c3fffe99555c
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sat, 21 Jun 2025 17:41:39 +0200
nomem changes for hare 0.25.2
Diffstat:
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/main.ha b/main.ha
@@ -272,16 +272,16 @@ fn is_excluded(filename: str) bool = {
return false;
};
-fn append_action(action: str, filename: str, format: str) void = {
+fn append_action(action: str, filename: str, format: str) (void | nomem) = {
if(!json) return;
let obj = json::object { ... };
- json::put(&obj, "action", action);
+ json::put(&obj, "action", action)?;
defer json::take(&obj, "action");
- json::put(&obj, "path", filename);
+ json::put(&obj, "path", filename)?;
defer json::take(&obj, "path");
- json::put(&obj, "format", format);
+ json::put(&obj, "format", format)?;
defer json::take(&obj, "format");
let obj_s = json::dumpstr(obj);
@@ -299,7 +299,7 @@ fn append_action(action: str, filename: str, format: str) void = {
};
};
-fn check_dir(dirname: str) (void | errors::invalid | io::error) = {
+fn check_dir(dirname: str) (void | nomem | errors::invalid | io::error) = {
const iter = match (os::iter(dirname)) {
case let iter: *fs::iterator =>
yield iter;
@@ -342,7 +342,7 @@ fn check_dir(dirname: str) (void | errors::invalid | io::error) = {
};
if (is_excluded(filename)) {
- append_action("ignoring", filename, blob_id);
+ append_action("ignoring", filename, blob_id)?;
fmt::printfln("ignoring {}:\t{}", blob_id, filename)!;
continue;
};
@@ -350,12 +350,12 @@ fn check_dir(dirname: str) (void | errors::invalid | io::error) = {
found = true;
if (noop) {
- append_action("detected", filename, blob_id);
+ append_action("detected", filename, blob_id)?;
fmt::printfln("detected {}:\t{}", blob_id, filename)!;
continue;
};
- append_action("removing", filename, blob_id);
+ append_action("removing", filename, blob_id)?;
fmt::printfln("removing {}:\t{}", blob_id, filename)!;
match (os::remove(filename)) {
@@ -380,6 +380,8 @@ fn check_dir(dirname: str) (void | errors::invalid | io::error) = {
yield d;
case let e: fs::error =>
fmt::fatalf("deblob: error: os::readdir({}): {}", dirname, fs::strerror(e));
+ case nomem =>
+ fmt::fatal("deblob: error: os::readdir({}): Out of Memory", dirname);
};
assert(len(files_before) == 61);
@@ -391,6 +393,8 @@ fn check_dir(dirname: str) (void | errors::invalid | io::error) = {
yield d;
case let e: fs::error =>
fmt::fatalf("deblob: error: os::readdir({}): {}", dirname, fs::strerror(e));
+ case nomem =>
+ fmt::fatal("deblob: error: os::readdir({}): Out of Memory", dirname);
};
assert(len(files_after) == 30);
};
@@ -416,7 +420,7 @@ export fn main() void = {
case 'c' =>
check = true;
case 'e' =>
- append(excludes, opt.1);
+ append(excludes, opt.1)!;
case 'd' =>
opt_d = opt.1;
case 'n' =>
@@ -476,6 +480,8 @@ export fn main() void = {
os::exit(0);
case errors::invalid =>
os::exit(1);
+ case nomem =>
+ fmt::fatal("deblob: error: Out of Memory");
case let e: io::error =>
fmt::errorfln("deblob: error: I/O error while traversing directories: {}", io::strerror(e))!;
os::exit(1);