summaryrefslogtreecommitdiff
path: root/src/CanonData.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/CanonData.zig')
-rw-r--r--src/CanonData.zig14
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;