authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2022-01-06 16:04:45 -08:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2022-01-06 16:04:45 -08:00
logc066b62dc13640279c30b3b8b05aca6fd7a43f6e
tree163890469181d64aef59d8539c6833ce7239e8ea
parentcd1a32c6b4be9ed0e6c84a94dbe026990575cb2d

add a deinit method and properly free used memory


1 files changed, 15 insertions(+), 1 deletions(-)

src/lib.zig+15-1
...@@ -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}
1414
15pub 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
15pub fn addSingle(name: string) !void {28pub 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;
4559