authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2025-12-28 22:19:34 -08:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2025-12-28 22:19:34 -08:00
log8ac20b7e0ae57e4f93931dc0de5b08c2cd92a66a
tree4c8d84eed6e5c98e1c033c6203f7490143676522
parentc9b47dd116ee7627b1914dc9374d5dde829c9f7e

store nul-terminated slices instead


1 files changed, 8 insertions(+), 12 deletions(-)

src/lib.zig+8-12
......@@ -1,15 +1,15 @@
11const std = @import("std");
2const string = []const u8;
2const string = [:0]const u8;
33const List = std.ArrayList(string);
44const extras = @import("extras");
55const linux = @import("sys-linux");
66
7var singles: std.StringArrayHashMap(string) = undefined;
8var multis: std.StringArrayHashMap(List) = undefined;
7var singles: std.ArrayHashMap(string, string, std.array_hash_map.StringContext, true) = undefined;
8var multis: std.ArrayHashMap(string, List, std.array_hash_map.StringContext, true) = undefined;
99
1010pub fn init(alloc: std.mem.Allocator) void {
11 singles = std.StringArrayHashMap(string).init(alloc);
12 multis = std.StringArrayHashMap(List).init(alloc);
11 singles = std.ArrayHashMap(string, string, std.array_hash_map.StringContext, true).init(alloc);
12 multis = std.ArrayHashMap(string, List, std.array_hash_map.StringContext, true).init(alloc);
1313}
1414
1515pub fn deinit() void {
......@@ -48,7 +48,7 @@ pub fn parse(k: FlagDashKind) !std.process.ArgIterator {
4848 blk: while (argiter.next()) |item| : (argi += 1) {
4949 const data = item;
5050 if (argi == 0) continue;
51 const name = extras.trimPrefix(data, dash);
51 const name: string = @ptrCast(extras.trimPrefix(data, dash));
5252 if (data.len == name.len) return error.BadFlag;
5353
5454 for (singles.keys()) |jtem| {
......@@ -77,18 +77,14 @@ pub fn parseEnv() !void {
7777 const alloc = singles.allocator;
7878
7979 for (singles.keys(), singles.values()) |k, *v| {
80 const u = try fixNameForEnv(alloc, k);
81 defer alloc.free(u);
82 if (linux.getenv(u)) |value| {
80 if (linux.getenv(k)) |value| {
8381 v.* = value;
8482 }
8583 }
8684 for (multis.keys(), multis.values()) |k, *v| {
8785 var n: usize = 1;
8886 while (true) : (n += 1) {
89 const u = try fixNameForEnv(alloc, k);
90 defer alloc.free(u);
91 const w = try std.fmt.allocPrintZ(alloc, "{s}_{d}", .{ u, n });
87 const w = try std.fmt.allocPrintZ(alloc, "{s}_{d}", .{ k, n });
9288 defer alloc.free(w);
9389 if (linux.getenv(w)) |value| {
9490 try v.append(value);