diff options
Diffstat (limited to 'src/CanonData.zig')
| -rw-r--r-- | src/CanonData.zig | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/CanonData.zig b/src/CanonData.zig index c67d1d6..d95a5be 100644 --- a/src/CanonData.zig +++ b/src/CanonData.zig | |||
| @@ -17,11 +17,11 @@ pub fn init(allocator: mem.Allocator) !CanonData { | |||
| 17 | .nfc = .empty, | 17 | .nfc = .empty, |
| 18 | .nfd = try allocator.alloc([]u21, 0x110000), | 18 | .nfd = try allocator.alloc([]u21, 0x110000), |
| 19 | }; | 19 | }; |
| 20 | var _cp: u24 = undefined; | ||
| 20 | 21 | ||
| 21 | var slices: usize = 0; | ||
| 22 | errdefer { | 22 | errdefer { |
| 23 | cdata.nfc.deinit(allocator); | 23 | cdata.nfc.deinit(allocator); |
| 24 | for (cdata.nfd[0..slices]) |slice| allocator.free(slice); | 24 | for (cdata.nfd[0.._cp]) |slice| allocator.free(slice); |
| 25 | allocator.free(cdata.nfd); | 25 | allocator.free(cdata.nfd); |
| 26 | } | 26 | } |
| 27 | 27 | ||
| @@ -31,14 +31,16 @@ pub fn init(allocator: mem.Allocator) !CanonData { | |||
| 31 | const len: u8 = try reader.readInt(u8, endian); | 31 | const len: u8 = try reader.readInt(u8, endian); |
| 32 | if (len == 0) break; | 32 | if (len == 0) break; |
| 33 | const cp = try reader.readInt(u24, endian); | 33 | const cp = try reader.readInt(u24, endian); |
| 34 | cdata.nfd[cp] = try allocator.alloc(u21, len - 1); | 34 | _cp = cp; |
| 35 | slices += 1; | 35 | const nfd_cp = try allocator.alloc(u21, len - 1); |
| 36 | errdefer allocator.free(nfd_cp); | ||
| 36 | for (0..len - 1) |i| { | 37 | for (0..len - 1) |i| { |
| 37 | cdata.nfd[cp][i] = @intCast(try reader.readInt(u24, endian)); | 38 | nfd_cp[i] = @intCast(try reader.readInt(u24, endian)); |
| 38 | } | 39 | } |
| 39 | if (len == 3) { | 40 | if (len == 3) { |
| 40 | try cdata.nfc.put(allocator, cdata.nfd[cp][0..2].*, @intCast(cp)); | 41 | try cdata.nfc.put(allocator, nfd_cp[0..2].*, @intCast(cp)); |
| 41 | } | 42 | } |
| 43 | cdata.nfd[cp] = nfd_cp; | ||
| 42 | } | 44 | } |
| 43 | 45 | ||
| 44 | return cdata; | 46 | return cdata; |