about summary refs log tree commit diff
path: root/src/config.zig
diff options
context:
space:
mode:
authorNguyễn Gia Phong <cnx@loang.net>2025-03-11 17:57:57 +0900
committerNguyễn Gia Phong <cnx@loang.net>2025-03-11 17:57:57 +0900
commitc5ad891da3d5cee9958a02d660db99a41fec111b (patch)
treea05a27125c1fa1acde723b4234dabf89997e4ead /src/config.zig
parent30f666f3ada479974353cdd7f3be9cdcec497fa1 (diff)
downloadblackshades-main.tar.gz
Port to Zig 0.14 HEAD main
Awaiting upstream libraries to support Zig 0.14 to purge the submodules:
* ini: https://github.com/ziglibs/ini/pull/14#issuecomment-2712560632
* qoi: https://github.com/ikskuh/zig-qoi/pull/14
Diffstat (limited to 'src/config.zig')
-rw-r--r--src/config.zig15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/config.zig b/src/config.zig
index 0d18223..723e95c 100644
--- a/src/config.zig
+++ b/src/config.zig
@@ -1,5 +1,5 @@
 // Configuration parser
-// Copyright (C) 2021-2022  Nguyễn Gia Phong
+// Copyright (C) 2021-2022, 2025  Nguyễn Gia Phong
 //
 // This file is part of Black Shades.
 //
@@ -23,6 +23,7 @@ const allocator = std.heap.c_allocator;
 const cwd = std.fs.cwd;
 const endian = @import("builtin").target.cpu.arch.endian();
 const eql = std.mem.eql;
+const free = std.c.free;
 const join = std.fs.path.join;
 const maxInt = std.math.maxInt;
 const mkdir = std.os.mkdir;
@@ -30,7 +31,7 @@ const parseFloat = std.fmt.parseFloat;
 const parseInt = std.fmt.parseInt;
 const std = @import("std");
 const stringToEnum = std.meta.stringToEnum;
-const tokenize = std.mem.tokenize;
+const tokenizeScalar = std.mem.tokenizeScalar;
 
 const Key = @import("gfz").Key;
 const ini = @import("ini");
@@ -69,7 +70,7 @@ fn parseLevels(dir_path: []const u8, length: usize) ![*]Level {
     defer input.close();
     const levels = try allocator.alloc(Level, length);
     errdefer allocator.free(levels);
-    var parser = ini.parse(allocator, input.reader());
+    var parser = ini.parse(allocator, input.reader(), "#;");
     defer parser.deinit();
 
     var i: usize = maxInt(usize);
@@ -92,7 +93,7 @@ fn parseLevels(dir_path: []const u8, length: usize) ![*]Level {
                 else return error.InvalidData;
             } else if (eql(u8, kv.key, "evil weapons")) {
                 var weapons = IntegerBitSet(8).initEmpty();
-                var enums = tokenize(u8, kv.value, " ");
+                var enums = tokenizeScalar(u8, kv.value, ' ');
                 while (enums.next()) |weapon|
                     weapons.set(try parseInt(u3, weapon, 10));
                 levels[i].evil_weapons = weapons.mask;
@@ -145,6 +146,10 @@ pub const Config = extern struct {
 
     levels: extern struct { ptr: [*]Level = undefined, len: usize = 0 } = .{},
     debug: bool = false,
+
+    pub fn deinit(self: Config) void {
+        defer free(self.levels.ptr);
+    }
 };
 
 /// Parse config.ini in the given base directory.
@@ -155,7 +160,7 @@ pub fn parse(base_dir: []const u8) !Config {
     defer dir.close();
     const input = try openData(dir, "config.ini");
     defer input.close();
-    var parser = ini.parse(allocator, input.reader());
+    var parser = ini.parse(allocator, input.reader(), "#;");
     defer parser.deinit();
 
     var config = Config{};