summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Hurst <ark@mansus.space>2025-07-17 10:32:28 +0200
committerJulian Hurst <ark@mansus.space>2025-07-17 10:32:28 +0200
commitf2e59b061764f6098c07c9ae1132a26f8f063b91 (patch)
treeb3a4ad9e0049a9442497f9b6205f80156c7d9a42
parent3a65eb418f6eafe5690e9fc52340be8e2bab8cb4 (diff)
downloadimp-f2e59b061764f6098c07c9ae1132a26f8f063b91.tar.gz
Bump hare version and handle nomem
-rw-r--r--imp.ha44
1 files changed, 24 insertions, 20 deletions
diff --git a/imp.ha b/imp.ha
index 632b2ac..73c11a9 100644
--- a/imp.ha
+++ b/imp.ha
@@ -63,13 +63,13 @@ export fn main() void = {
case 'l' =>
list = true;
case 'g' =>
- let spl = strings::split(opt.1, ",");
+ let spl = strings::split(opt.1, ",")!;
defer free(spl);
- append(accfilter.groups, spl...);
+ append(accfilter.groups, spl...)!;
case 'm' =>
- let spl = strings::split(opt.1, ",");
+ let spl = strings::split(opt.1, ",")!;
defer free(spl);
- append(accfilter.urls, spl...);
+ append(accfilter.urls, spl...)!;
case 'n' =>
accfilter.notes = opt.1;
case 'f' =>
@@ -80,7 +80,7 @@ export fn main() void = {
for (let i = 0z; i < len(cmd.args); i += 1) {
- append(accfilter.accnames, cmd.args[i]);
+ append(accfilter.accnames, cmd.args[i])!;
};
if (verbose) {
@@ -98,6 +98,8 @@ export fn main() void = {
fmt::fatal(os::exec::strerror(e));
case let e: io::error =>
fmt::fatal(io::strerror(e));
+ case nomem =>
+ fmt::fatal("Insufficient memory");
};
defer free(ini_data);
@@ -106,6 +108,8 @@ export fn main() void = {
yield e;
case let e: format::ini::error =>
fmt::fatal(format::ini::strerror(e));
+ case nomem =>
+ fmt::fatal("Insufficient memory");
};
accounts = accs_filter(accounts, accfilter);
@@ -143,17 +147,17 @@ fn printfilter(f: filter) void = {
fmt::fprintln(os::stderr, "printing filter:")!;
fmt::fprint(os::stderr, "accs: ")!;
- let accnames = strings::join(", ", f.accnames...);
+ let accnames = strings::join(", ", f.accnames...)!;
defer free(accnames);
fmt::fprintln(os::stderr, accnames)!;
fmt::fprint(os::stderr, "groups: ")!;
- let groups = strings::join(", ", f.groups...);
+ let groups = strings::join(", ", f.groups...)!;
defer free(groups);
fmt::fprintln(os::stderr, groups)!;
fmt::fprint(os::stderr, "urls: ")!;
- let urls = strings::join(", ", f.urls...);
+ let urls = strings::join(", ", f.urls...)!;
defer free(urls);
fmt::fprintln(os::stderr, urls)!;
@@ -202,7 +206,7 @@ fn accs_filter(accounts: []account, accfilter: filter) []account = {
for (let i = 0z; i < len(accounts); i += 1) {
let acc = accounts[i];
if (isfiltered(acc, accfilter)) {
- append(resaccs, acc);
+ append(resaccs, acc)!;
};
};
return resaccs;
@@ -230,7 +234,7 @@ fn account_free(acc: account) void = {
free(acc.group);
};
-fn parse(data: []u8) ([]account | format::ini::error) = {
+fn parse(data: []u8) ([]account | format::ini::error | nomem) = {
let scanner = format::ini::scan(&memio::fixed(data));
defer format::ini::finish(&scanner);
@@ -246,22 +250,22 @@ fn parse(data: []u8) ([]account | format::ini::error) = {
};
match (lookupaccount(accounts, entry.0)) {
case void =>
- let name = strings::dup(entry.0);
- let spl = strings::split(name, "/");
+ let name = strings::dup(entry.0)?;
+ let spl = strings::split(name, "/")?;
defer free(spl);
let group = "";
if (len(spl) > 1) {
- group = strings::join("/", spl[..len(spl) - 1]...);
+ group = strings::join("/", spl[..len(spl) - 1]...)?;
};
let acc = account {
name = name,
group = group,
...
};
- setfieldaccount(&acc, strings::dup(entry.1), strings::dup(entry.2));
- append(accounts, acc);
+ setfieldaccount(&acc, strings::dup(entry.1)?, strings::dup(entry.2)?);
+ append(accounts, acc)!;
case let acc: *account =>
- setfieldaccount(acc, strings::dup(entry.1), strings::dup(entry.2));
+ setfieldaccount(acc, strings::dup(entry.1)?, strings::dup(entry.2)?);
};
};
return accounts;
@@ -274,7 +278,7 @@ fn setfieldaccount(acc: *account, key: str, val: str) void = {
//defer free(val);
// Handle quoted values
- let valrunes = strings::torunes(val);
+ let valrunes = strings::torunes(val)!;
defer free(valrunes);
if (valrunes[0] == '"' && valrunes[len(valrunes)-1] == '"') {
val = strings::trim(val, '"');
@@ -301,12 +305,12 @@ fn lookupaccount(accounts: []account, name: str) (*account | void) = {
return;
};
-fn decrypt(file: str) ([]u8 | os::exec::error | io::error) = {
+fn decrypt(file: str) ([]u8 | os::exec::error | io::error | nomem) = {
let cmd = os::exec::cmd("gpg", "-d", file)?;
let pipe_stdout = os::exec::pipe();
- os::exec::addfile(&cmd, os::stdout_file, pipe_stdout.1);
- os::exec::addfile(&cmd, os::stderr_file, os::exec::nullfd);
+ os::exec::addfile(&cmd, os::stdout_file, pipe_stdout.1)?;
+ os::exec::addfile(&cmd, os::stderr_file, os::exec::nullfd)?;
let proc = os::exec::start(&cmd)?;
io::close(pipe_stdout.1)?;