authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2024-04-14 20:11:05 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2024-04-14 20:11:05 -07:00
log893469417a30a2f4dae17c277c8b6a2fadf7f094
treee070f8a8585ef338db679d28fea9134bf3b730f8
parent8d19e0ac576b14b1ae3096c301aaaf65b0ad881d

fix crash that can occur when calling parseEnv before parse


1 files changed, 9 insertions(+), 10 deletions(-)

src/lib.zig+9-10
...@@ -73,23 +73,22 @@ pub fn parse(k: FlagDashKind) !std.process.ArgIterator {...@@ -73,23 +73,22 @@ pub fn parse(k: FlagDashKind) !std.process.ArgIterator {
73pub fn parseEnv() !void {73pub fn parseEnv() !void {
74 const alloc = singles.allocator;74 const alloc = singles.allocator;
7575
76 for (singles.keys()) |jtem| {76 for (singles.keys(), singles.values()) |k, *v| {
77 const u = try fixNameForEnv(alloc, jtem);77 const u = try fixNameForEnv(alloc, k);
78 defer alloc.free(u);78 defer alloc.free(u);
79 if (std.os.getenv(u)) |value| {79 if (std.os.getenv(u)) |value| {
80 try singles.put(jtem, value);80 v.* = value;
81 }81 }
82 }82 }
83 for (multis.keys()) |jtem| {83 for (multis.keys(), multis.values()) |k, *v| {
84 const e = multis.getEntry(jtem).?;
85 var n: usize = 1;84 var n: usize = 1;
86 while (true) : (n += 1) {85 while (true) : (n += 1) {
87 const u = try fixNameForEnv(alloc, e.key_ptr.*);86 const u = try fixNameForEnv(alloc, k);
88 defer alloc.free(u);87 defer alloc.free(u);
89 const k = try std.fmt.allocPrint(alloc, "{s}_{d}", .{ u, n });88 const w = try std.fmt.allocPrint(alloc, "{s}_{d}", .{ u, n });
90 defer alloc.free(k);89 defer alloc.free(w);
91 if (std.os.getenv(k)) |value| {90 if (std.os.getenv(w)) |value| {
92 try e.value_ptr.append(value);91 try v.append(value);
93 continue;92 continue;
94 }93 }
95 break;94 break;