aboutsummaryrefslogtreecommitdiff
path: root/core/flags
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2026-02-11 22:52:24 +0100
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2026-02-11 22:52:24 +0100
commitb18f75c41c4a78c1e368908ee0bfbba8efa1c494 (patch)
tree2b4afd55b88d9462cc3a9dbaff90c1fede13c19f /core/flags
parentb82512b4cfca4f5e357d1510696f6665755df6f9 (diff)
Make `core:flags` file open errors more readable
If it fails because the file doesn't exist: [Open_File_Error#2] Unable to open "foo.file". File not found. If it does exist and the flags are simple (.Read, .Write or both), it'll say this: [Open_File_Error#2] Unable to open "foo.file" with perms 0o444 as read-only It it does exist but fails to open for other reasons, it'll print: [Open_File_Error#2] Unable to open "foo.file" with perms 0o444 and flags File_Flags{....} Future work: Translate permissions from octal to `ls -al` format (e.g. `-rwxrwxrwx`).
Diffstat (limited to 'core/flags')
-rw-r--r--core/flags/util.odin37
1 files changed, 31 insertions, 6 deletions
diff --git a/core/flags/util.odin b/core/flags/util.odin
index 0d18fa196..b5e557cf6 100644
--- a/core/flags/util.odin
+++ b/core/flags/util.odin
@@ -72,12 +72,37 @@ print_errors :: proc(data_type: typeid, error: Error, program: string, style: Pa
case Parse_Error:
fmt.wprintfln(stderr, "[%T.%v] %s", specific_error, specific_error.reason, specific_error.message)
case Open_File_Error:
- fmt.wprintfln(stderr, "[%T#%i] Unable to open file with perms 0o%o and flags %v: %s",
- specific_error,
- specific_error.errno,
- specific_error.perms,
- specific_error.flags,
- specific_error.filename)
+ if os.exists(specific_error.filename) {
+ flags: string
+ if specific_error.flags == {.Read} {
+ flags = "read-only"
+ } else if specific_error.flags == {.Write} {
+ flags = "write-only"
+ } else if specific_error.flags == {.Read, .Write} {
+ flags = "read/write"
+ }
+
+ if flags != "" {
+ fmt.wprintfln(stderr, "[%T#%i] Unable to open %q with perms 0o%o as %s",
+ specific_error,
+ specific_error.errno,
+ specific_error.filename,
+ u16(transmute(u32)specific_error.perms),
+ flags)
+ } else {
+ fmt.wprintfln(stderr, "[%T#%i] Unable to open %q with perms 0o%o and flags %v",
+ specific_error,
+ specific_error.errno,
+ specific_error.filename,
+ u16(transmute(u32)specific_error.perms),
+ specific_error.flags)
+ }
+ } else {
+ fmt.wprintfln(stderr, "[%T#%i] Unable to open %q. File not found",
+ specific_error,
+ specific_error.errno,
+ specific_error.filename)
+ }
case Validation_Error:
fmt.wprintfln(stderr, "[%T] %s", specific_error, specific_error.message)
case Help_Request: