authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-12-30 21:45:01-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-04 00:27:08-08:00
logb85524d0c83686b7492aee78d5f766e76b59fc90
treeb980218e98e957460fc3190efdd441eae5295db9
parent32af0f6154edb1c1434d0bb489d2abfea7da1685

std.process.Environ: fix contains function


3 files changed, 8 insertions(+), 7 deletions(-)

lib/std/Io.zig+1-1
...@@ -2242,5 +2242,5 @@ pub fn unlockStderr(io: Io) void {...@@ -2242,5 +2242,5 @@ pub fn unlockStderr(io: Io) void {
2242pub fn environ(io: Io, name: []const u8) ?[]const u8 {2242pub fn environ(io: Io, name: []const u8) ?[]const u8 {
2243 _ = io;2243 _ = io;
2244 _ = name;2244 _ = name;
2245 if (true) @panic("TODO");2245 if (true) @panic("TODO Io.environ");
2246}2246}
lib/std/Io/Threaded.zig+3-3
...@@ -12711,21 +12711,21 @@ fn scanEnviron(t: *Threaded) void {...@@ -12711,21 +12711,21 @@ fn scanEnviron(t: *Threaded) void {
12711fn processReplace(userdata: ?*anyopaque, options: std.process.ReplaceOptions) std.process.ReplaceError {12711fn processReplace(userdata: ?*anyopaque, options: std.process.ReplaceOptions) std.process.ReplaceError {
12712 _ = userdata;12712 _ = userdata;
12713 _ = options;12713 _ = options;
12714 @panic("TODO");12714 @panic("TODO processReplace");
12715}12715}
1271612716
12717fn processReplacePath(userdata: ?*anyopaque, dir: Dir, options: std.process.ReplaceOptions) std.process.ReplaceError {12717fn processReplacePath(userdata: ?*anyopaque, dir: Dir, options: std.process.ReplaceOptions) std.process.ReplaceError {
12718 _ = userdata;12718 _ = userdata;
12719 _ = dir;12719 _ = dir;
12720 _ = options;12720 _ = options;
12721 @panic("TODO");12721 @panic("TODO processReplacePath");
12722}12722}
1272312723
12724fn processSpawnPath(userdata: ?*anyopaque, dir: Dir, options: process.SpawnOptions) process.SpawnError!process.Child {12724fn processSpawnPath(userdata: ?*anyopaque, dir: Dir, options: process.SpawnOptions) process.SpawnError!process.Child {
12725 _ = userdata;12725 _ = userdata;
12726 _ = dir;12726 _ = dir;
12727 _ = options;12727 _ = options;
12728 @panic("TODO");12728 @panic("TODO processSpawnPath");
12729}12729}
1273012730
12731const processSpawn = switch (native_os) {12731const processSpawn = switch (native_os) {
lib/std/process/Environ.zig+4-3
...@@ -150,7 +150,7 @@ pub const Map = struct {...@@ -150,7 +150,7 @@ pub const Map = struct {
150 }150 }
151151
152 pub fn contains(m: *const Map, key: []const u8) bool {152 pub fn contains(m: *const Map, key: []const u8) bool {
153 return m.contains(key);153 return m.array_hash_map.contains(key);
154 }154 }
155155
156 /// If there is an entry with a matching key, it is deleted from the hash156 /// If there is an entry with a matching key, it is deleted from the hash
...@@ -579,10 +579,11 @@ pub const CreateBlockOptions = struct {...@@ -579,10 +579,11 @@ pub const CreateBlockOptions = struct {
579/// Creates a null-delimited environment variable block in the format expected579/// Creates a null-delimited environment variable block in the format expected
580/// by POSIX, from a different one.580/// by POSIX, from a different one.
581pub fn createBlock(existing: Environ, arena: Allocator, options: CreateBlockOptions) Allocator.Error![:null]?[*:0]u8 {581pub fn createBlock(existing: Environ, arena: Allocator, options: CreateBlockOptions) Allocator.Error![:null]?[*:0]u8 {
582 const existing_block: [*:null]const ?[*:0]const u8 = @ptrCast(existing.block);
582 const existing_count, const contains_zig_progress = c: {583 const existing_count, const contains_zig_progress = c: {
583 var count: usize = 0;584 var count: usize = 0;
584 var contains = false;585 var contains = false;
585 while (existing.block[count]) |line| : (count += 1) {586 while (existing_block[count]) |line| : (count += 1) {
586 contains = contains or mem.eql(u8, mem.sliceTo(line, '='), "ZIG_PROGRESS");587 contains = contains or mem.eql(u8, mem.sliceTo(line, '='), "ZIG_PROGRESS");
587 }588 }
588 break :c .{ count, contains };589 break :c .{ count, contains };
...@@ -617,7 +618,7 @@ pub fn createBlock(existing: Environ, arena: Allocator, options: CreateBlockOpti...@@ -617,7 +618,7 @@ pub fn createBlock(existing: Environ, arena: Allocator, options: CreateBlockOpti
617 i += 1;618 i += 1;
618 }619 }
619620
620 while (existing.block[existing_index]) |line| : (existing_index += 1) {621 while (existing_block[existing_index]) |line| : (existing_index += 1) {
621 if (mem.eql(u8, mem.sliceTo(line, '='), "ZIG_PROGRESS")) switch (zig_progress_action) {622 if (mem.eql(u8, mem.sliceTo(line, '='), "ZIG_PROGRESS")) switch (zig_progress_action) {
622 .add => unreachable,623 .add => unreachable,
623 .delete => continue,624 .delete => continue,