aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-30 23:58:46 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-30 23:58:46 -0700
commitba999c9ac3edac32848a9746283d0bfc5331ed44 (patch)
treed8897f3666935d9f3637443cd0c29a4e2417e636 /src
parent92b27b338d459473fea8d8ca3b3802d02961d530 (diff)
downloadbun-ba999c9ac3edac32848a9746283d0bfc5331ed44.tar.gz
bun-ba999c9ac3edac32848a9746283d0bfc5331ed44.tar.zst
bun-ba999c9ac3edac32848a9746283d0bfc5331ed44.zip
cleanup
Diffstat (limited to 'src')
-rw-r--r--src/c.zig72
-rw-r--r--src/fs.zig9
-rw-r--r--src/global.zig2
3 files changed, 82 insertions, 1 deletions
diff --git a/src/c.zig b/src/c.zig
index 0f3c40b88..aaeb980da 100644
--- a/src/c.zig
+++ b/src/c.zig
@@ -177,3 +177,75 @@ pub fn kindFromMode(mode: os.mode_t) std.fs.File.Kind {
else => .Unknown,
};
}
+
+pub fn getSelfExeSharedLibPaths(allocator: std.mem.Allocator) error{OutOfMemory}![][:0]u8 {
+ const List = std.ArrayList([:0]u8);
+ switch (builtin.os.tag) {
+ .linux,
+ .freebsd,
+ .netbsd,
+ .dragonfly,
+ .openbsd,
+ .solaris,
+ => {
+ var paths = List.init(allocator);
+ errdefer {
+ const slice = paths.toOwnedSlice();
+ for (slice) |item| {
+ allocator.free(item);
+ }
+ allocator.free(slice);
+ }
+ try os.dl_iterate_phdr(&paths, error{OutOfMemory}, struct {
+ fn callback(info: *os.dl_phdr_info, size: usize, list: *List) !void {
+ _ = size;
+ const name = info.dlpi_name orelse return;
+ if (name[0] == '/') {
+ const item = try list.allocator.dupeZ(u8, mem.sliceTo(name, 0));
+ errdefer list.allocator.free(item);
+ try list.append(item);
+ }
+ }
+ }.callback);
+ return paths.toOwnedSlice();
+ },
+ .macos, .ios, .watchos, .tvos => {
+ var paths = List.init(allocator);
+ errdefer {
+ const slice = paths.toOwnedSlice();
+ for (slice) |item| {
+ allocator.free(item);
+ }
+ allocator.free(slice);
+ }
+ const img_count = std.c._dyld_image_count();
+ var i: u32 = 0;
+ while (i < img_count) : (i += 1) {
+ const name = std.c._dyld_get_image_name(i);
+ const item = try allocator.dupeZ(u8, mem.sliceTo(name, 0));
+ errdefer allocator.free(item);
+ try paths.append(item);
+ }
+ return paths.toOwnedSlice();
+ },
+ // revisit if Haiku implements dl_iterat_phdr (https://dev.haiku-os.org/ticket/15743)
+ .haiku => {
+ var paths = List.init(allocator);
+ errdefer {
+ const slice = paths.toOwnedSlice();
+ for (slice) |item| {
+ allocator.free(item);
+ }
+ allocator.free(slice);
+ }
+
+ var b = "/boot/system/runtime_loader";
+ const item = try allocator.dupeZ(u8, mem.sliceTo(b, 0));
+ errdefer allocator.free(item);
+ try paths.append(item);
+
+ return paths.toOwnedSlice();
+ },
+ else => @compileError("getSelfExeSharedLibPaths unimplemented for this target"),
+ }
+}
diff --git a/src/fs.zig b/src/fs.zig
index e4a2268dc..78888dcd4 100644
--- a/src/fs.zig
+++ b/src/fs.zig
@@ -490,6 +490,15 @@ pub const FileSystem = struct {
return try allocator.dupe(u8, joined);
}
+ pub fn absAllocZ(f: *@This(), allocator: std.mem.Allocator, parts: anytype) ![*:0]const u8 {
+ const joined = path_handler.joinAbsString(
+ f.top_level_dir,
+ parts,
+ .auto,
+ );
+ return try allocator.dupeZ(u8, joined);
+ }
+
pub fn abs(f: *@This(), parts: anytype) string {
return path_handler.joinAbsString(
f.top_level_dir,
diff --git a/src/global.zig b/src/global.zig
index 5bec684b0..25b908543 100644
--- a/src/global.zig
+++ b/src/global.zig
@@ -15,7 +15,7 @@ const root = @import("root");
pub const meta = @import("./meta.zig");
pub const ComptimeStringMap = @import("./comptime_string_map.zig").ComptimeStringMap;
pub const base64 = @import("./base64/base64.zig");
-
+pub const path = @import("./resolver/resolve_path.zig");
pub const fmt = struct {
pub usingnamespace std.fmt;