| ... | ... | @@ -43,9 +43,10 @@ pub const BufMap = struct { |
| 43 | 43 | pub fn set(self: *BufMap, key: []const u8, value: []const u8) !void { |
| 44 | 44 | const value_copy = try self.copy(value); |
| 45 | 45 | errdefer self.free(value_copy); |
| 46 | | // Avoid copying key if it already exists |
| 47 | 46 | const get_or_put = try self.hash_map.getOrPut(key); |
| 48 | | if (!get_or_put.found_existing) { |
| 47 | if (get_or_put.found_existing) { |
| 48 | self.free(get_or_put.kv.value); |
| 49 | } else { |
| 49 | 50 | get_or_put.kv.key = self.copy(key) catch |err| { |
| 50 | 51 | _ = self.hash_map.remove(key); |
| 51 | 52 | return err; |
| ... | ... | @@ -83,8 +84,7 @@ pub const BufMap = struct { |
| 83 | 84 | }; |
| 84 | 85 | |
| 85 | 86 | test "BufMap" { |
| 86 | | // TODO: uncomment and fix the leak |
| 87 | | var bufmap = BufMap.init(std.heap.page_allocator); |
| 87 | var bufmap = BufMap.init(std.testing.allocator); |
| 88 | 88 | defer bufmap.deinit(); |
| 89 | 89 | |
| 90 | 90 | try bufmap.set("x", "1"); |