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