diff --git a/src/os/env.zig b/src/os/env.zig index cf6cc0fe7..fe2be20de 100644 --- a/src/os/env.zig +++ b/src/os/env.zig @@ -3,13 +3,15 @@ const builtin = @import("builtin"); const Allocator = std.mem.Allocator; const posix = std.posix; +pub const Error = Allocator.Error; + /// Append a value to an environment variable such as PATH. /// The returned value is always allocated so it must be freed. pub fn appendEnv( alloc: Allocator, current: []const u8, value: []const u8, -) ![]u8 { +) Error![]u8 { // If there is no prior value, we return it as-is if (current.len == 0) return try alloc.dupe(u8, value); @@ -26,7 +28,7 @@ pub fn appendEnvAlways( alloc: Allocator, current: []const u8, value: []const u8, -) ![]u8 { +) Error![]u8 { return try std.fmt.allocPrint(alloc, "{s}{c}{s}", .{ current, std.fs.path.delimiter, @@ -40,7 +42,7 @@ pub fn prependEnv( alloc: Allocator, current: []const u8, value: []const u8, -) ![]u8 { +) Error![]u8 { // If there is no prior value, we return it as-is if (current.len == 0) return try alloc.dupe(u8, value); @@ -68,7 +70,7 @@ pub const GetEnvResult = struct { /// This will allocate on Windows but not on other platforms. The returned /// value should have deinit called to do the proper cleanup no matter what /// platform you are on. -pub fn getenv(alloc: Allocator, key: []const u8) !?GetEnvResult { +pub fn getenv(alloc: Allocator, key: []const u8) Error!?GetEnvResult { return switch (builtin.os.tag) { // Non-Windows doesn't need to allocate else => if (posix.getenv(key)) |v| .{ .value = v } else null, @@ -78,7 +80,8 @@ pub fn getenv(alloc: Allocator, key: []const u8) !?GetEnvResult { .value = v, } else |err| switch (err) { error.EnvironmentVariableNotFound => null, - else => err, + error.InvalidWtf8 => null, + else => |e| e, }, }; }