aboutsummaryrefslogtreecommitdiff
path: root/std
diff options
context:
space:
mode:
Diffstat (limited to 'std')
-rw-r--r--std/os/index.zig12
1 files changed, 11 insertions, 1 deletions
diff --git a/std/os/index.zig b/std/os/index.zig
index a543f27be4..057be6a370 100644
--- a/std/os/index.zig
+++ b/std/os/index.zig
@@ -1556,12 +1556,22 @@ pub fn openSelfExe() %io.File {
return io.File.openRead("/proc/self/exe", null);
},
Os.macosx, Os.ios => {
- @panic("TODO: openSelfExe on Darwin");
+ var fixed_buffer_mem: [darwin.PATH_MAX]u8 = undefined;
+ var fixed_allocator = mem.FixedBufferAllocator.init(fixed_buffer_mem[0..]);
+ const self_exe_path = try selfExePath(&fixed_allocator.allocator);
+ return io.File.openRead(self_exe_path, null);
},
else => @compileError("Unsupported OS"),
}
}
+test "openSelfExe" {
+ switch (builtin.os) {
+ Os.linux, Os.macosx, Os.ios => (try openSelfExe()).close(),
+ else => return, // Unsupported OS.
+ }
+}
+
/// Get the path to the current executable.
/// If you only need the directory, use selfExeDirPath.
/// If you only want an open file handle, use openSelfExe.