diff --git a/src/config/config.zig b/src/config/config.zig index 5574bbf..dccb989 100644 --- a/src/config/config.zig +++ b/src/config/config.zig @@ -19,7 +19,7 @@ test "parse zocket config" const allocator = std.testing.allocator; - const parsed = try parse(io, allocator, "zocket/config.toml"); + const parsed = try parse(io, allocator, "config/config.toml"); defer parsed.deinit(); const cfg = parsed.value; diff --git a/src/main.zig b/src/main.zig index 3ad5da4..08e0265 100644 --- a/src/main.zig +++ b/src/main.zig @@ -9,48 +9,53 @@ const args = zocket.deps.args; pub fn main(init: std.process.Init) !void { - const io = init.io; + const debug = builtin.mode == .Debug; + const io = init.io; - if (builtin.mode == .Debug) + var gpa: std.heap.DebugAllocator(.{}) = .init; + defer _ = gpa.deinit(); + defer if (debug) { - var arena: std.heap.DebugAllocator(.{}) = .init; - defer _ = arena.deinit(); + if (gpa.detectLeaks()) std.posix.exit(1); + }; - try run(io, arena.allocator(), "config/config.toml"); + const allocator = if (debug) gpa.allocator() else std.heap.c_allocator; + + var tmpArena = std.heap.ArenaAllocator.init(std.heap.c_allocator); + const tmpAllocator = tmpArena.allocator(); + + var parser = try args.ArgumentParser.init(tmpAllocator, .{ + .name = "zocket", + .version = options.version, + .description = "A lightweight Zig WebSocket server and mesh routing daemon.", + }); + + var path: []const u8 = undefined; + + try parser.addOption("path", .{ + .short = 'p', + .help = "Configuration-File Path (*.toml)", + }); + + var result = try parser.parseProcess(init); + + if (debug) + { + const tmpPath = result.getString("path") orelse "config/config.toml"; + path = try allocator.dupe(u8, tmpPath); } else { - var arena = std.heap.ArenaAllocator.init(std.heap.smp_allocator); - defer arena.deinit(); - const allocator = arena.allocator(); - - var tmpArena = std.heap.ArenaAllocator.init(std.heap.smp_allocator); - const tmpAllocator = tmpArena.allocator(); - - var parser = try args.ArgumentParser.init(tmpAllocator, .{ - .name = "zocket", - .version = options.version, - .description = "A lightweight Zig WebSocket server and mesh routing daemon.", - }); - - try parser.addOption("path", .{ - .short = 'p', - .help = "Configuration-File Path (*.toml)", - }); - - var result = try parser.parseProcess(init); - const tmpPath = result.getString("path") orelse blk: { const exe = try std.process.executableDirPathAlloc(io, tmpAllocator); break :blk try std.Io.Dir.path.join(tmpAllocator, &.{ exe, "config/config.toml" }); }; - - const path = try allocator.dupe(u8, tmpPath); - - tmpArena.deinit(); - - try run(io, allocator, path); + path = try allocator.dupe(u8, tmpPath); } + + tmpArena.deinit(); + + try run(io, allocator, path); } fn run(io: std.Io, allocator: std.mem.Allocator, path: []const u8) !void