diff options
author | Nguyễn Gia Phong <cnx@loang.net> | 2025-03-11 17:57:57 +0900 |
---|---|---|
committer | Nguyễn Gia Phong <cnx@loang.net> | 2025-03-11 17:57:57 +0900 |
commit | c5ad891da3d5cee9958a02d660db99a41fec111b (patch) | |
tree | a05a27125c1fa1acde723b4234dabf89997e4ead /src/config.zig | |
parent | 30f666f3ada479974353cdd7f3be9cdcec497fa1 (diff) | |
download | blackshades-main.tar.gz |
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.zig | 15 |
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{}; |