| ... | ... | @@ -2,6 +2,7 @@ const std = @import("std"); |
| 2 | 2 | const string = []const u8; |
| 3 | 3 | const List = std.ArrayList(string); |
| 4 | 4 | const extras = @import("extras"); |
| 5 | const range = @import("range").range; |
| 5 | 6 | |
| 6 | 7 | var singles: std.StringArrayHashMap(string) = undefined; |
| 7 | 8 | var multis: std.StringArrayHashMap(List) = undefined; |
| ... | ... | @@ -66,7 +67,7 @@ pub fn parseEnv() !void { |
| 66 | 67 | const alloc = singles.allocator; |
| 67 | 68 | |
| 68 | 69 | for (singles.keys()) |jtem| { |
| 69 | | const u = try extras.asciiUpper(alloc, jtem); |
| 70 | const u = try fixNameForEnv(alloc, jtem); |
| 70 | 71 | defer alloc.free(u); |
| 71 | 72 | if (std.os.getenv(u)) |value| { |
| 72 | 73 | try singles.put(jtem, value); |
| ... | ... | @@ -76,7 +77,7 @@ pub fn parseEnv() !void { |
| 76 | 77 | const e = multis.getEntry(jtem).?; |
| 77 | 78 | var n: usize = 1; |
| 78 | 79 | while (true) : (n += 1) { |
| 79 | | const u = try extras.asciiUpper(alloc, e.key_ptr.*); |
| 80 | const u = try fixNameForEnv(alloc, e.key_ptr.*); |
| 80 | 81 | defer alloc.free(u); |
| 81 | 82 | const k = try std.fmt.allocPrint(alloc, "{s}_{d}", .{ u, n }); |
| 82 | 83 | defer alloc.free(k); |
| ... | ... | @@ -89,6 +90,16 @@ pub fn parseEnv() !void { |
| 89 | 90 | } |
| 90 | 91 | } |
| 91 | 92 | |
| 93 | fn fixNameForEnv(alloc: *std.mem.Allocator, input: string) !string { |
| 94 | var ret = try extras.asciiUpper(alloc, input); |
| 95 | for (range(ret.len)) |_, i| { |
| 96 | if (ret[i] == '-') { |
| 97 | ret[i] = '_'; |
| 98 | } |
| 99 | } |
| 100 | return ret; |
| 101 | } |
| 102 | |
| 92 | 103 | pub fn getSingle(name: string) ?string { |
| 93 | 104 | const x = singles.get(name).?; |
| 94 | 105 | return if (x.len > 0) x else null; |