| ... | @@ -12,6 +12,19 @@ pub fn init(alloc: std.mem.Allocator) void { | ... | @@ -12,6 +12,19 @@ pub fn init(alloc: std.mem.Allocator) void { |
| 12 | multis = std.StringArrayHashMap(List).init(alloc); | 12 | multis = std.StringArrayHashMap(List).init(alloc); |
| 13 | } | 13 | } |
| 14 | | 14 | |
| | 15 | pub fn deinit() void { |
| | 16 | var iter1 = singles.iterator(); |
| | 17 | while (iter1.next()) |entry| singles.allocator.free(entry.value_ptr.*); |
| | 18 | singles.deinit(); |
| | 19 | |
| | 20 | var iter2 = multis.iterator(); |
| | 21 | while (iter2.next()) |entry| { |
| | 22 | for (entry.value_ptr.items) |item| multis.allocator.free(item); |
| | 23 | entry.value_ptr.deinit(); |
| | 24 | } |
| | 25 | multis.deinit(); |
| | 26 | } |
| | 27 | |
| 15 | pub fn addSingle(name: string) !void { | 28 | pub fn addSingle(name: string) !void { |
| 16 | try singles.putNoClobber(name, ""); | 29 | try singles.putNoClobber(name, ""); |
| 17 | } | 30 | } |
| ... | @@ -38,8 +51,9 @@ pub fn parse(k: FlagDashKind) !std.process.ArgIterator { | ... | @@ -38,8 +51,9 @@ pub fn parse(k: FlagDashKind) !std.process.ArgIterator { |
| 38 | defer argiter.deinit(); | 51 | defer argiter.deinit(); |
| 39 | var argi: usize = 0; | 52 | var argi: usize = 0; |
| 40 | blk: while (argiter.next(singles.allocator)) |item| : (argi += 1) { | 53 | blk: while (argiter.next(singles.allocator)) |item| : (argi += 1) { |
| 41 | if (argi == 0) continue; | | |
| 42 | const data = try item; | 54 | const data = try item; |
| | 55 | defer singles.allocator.free(data); |
| | 56 | if (argi == 0) continue; |
| 43 | const name = extras.trimPrefix(data, dash); | 57 | const name = extras.trimPrefix(data, dash); |
| 44 | if (data.len == name.len) return error.BadFlag; | 58 | if (data.len == name.len) return error.BadFlag; |
| 45 | | 59 | |