diff options
author | 2022-04-30 23:58:46 -0700 | |
---|---|---|
committer | 2022-04-30 23:58:46 -0700 | |
commit | ba999c9ac3edac32848a9746283d0bfc5331ed44 (patch) | |
tree | d8897f3666935d9f3637443cd0c29a4e2417e636 /src | |
parent | 92b27b338d459473fea8d8ca3b3802d02961d530 (diff) | |
download | bun-ba999c9ac3edac32848a9746283d0bfc5331ed44.tar.gz bun-ba999c9ac3edac32848a9746283d0bfc5331ed44.tar.zst bun-ba999c9ac3edac32848a9746283d0bfc5331ed44.zip |
cleanup
Diffstat (limited to 'src')
-rw-r--r-- | src/c.zig | 72 | ||||
-rw-r--r-- | src/fs.zig | 9 | ||||
-rw-r--r-- | src/global.zig | 2 |
3 files changed, 82 insertions, 1 deletions
@@ -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; |