File: self%2Blinux.ha

package info (click to toggle)
hare 0.25.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,948 kB
  • sloc: asm: 1,264; makefile: 123; sh: 114; lisp: 101
file content (27 lines) | stat: -rw-r--r-- 585 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// SPDX-License-Identifier: MPL-2.0
// (c) Hare authors <https://harelang.org>

use errors;
use fs;
use io;
use os;

// Opens the executing process's binary image.
export fn self() (image | io::error | fs::error) = {
	const file = match (os::open("/proc/self/exe")) {
	case let file: io::file =>
		yield file;
	case =>
		// procfs may not be available, try fallback
		return self_argv();
	};

	match (open(file)) {
	case let img: image =>
		return img;
	case let err: io::error =>
		return err;
	case errors::invalid =>
		abort("Running program image is not a valid ELF file");
	};
};