diff --git a/src/main.zig b/src/main.zig --- a/src/main.zig +++ b/src/main.zig @@ -19,8 +19,8 @@ const config: maivi.Config = try .init(init.io, init.arena, init.environ_map); if (!maivi.dev) - maivi.rev = init.environ_map.get("MAIVI_REV") orelse - try rev_str(init, config.root); + maivi.rev = try rev_str(init, config.root); + defer if (maivi.rev) |rev| init.gpa.free(rev); try maivi.init(init.io, init.gpa, &config); defer maivi.deinit(); @@ -45,6 +45,8 @@ try maivi.listen(); } fn rev_str(init: std.process.Init, root: []const u8) ![]const u8 { + if (init.environ_map.get("MAIVI_REV")) |env_rev| return init.gpa.dupe(u8, env_rev); + if (!std.process.can_spawn) { std.debug.print("error: version info cannot be retrieved from git. version must be provided using -Dversion-string\n", .{}); std.process.exit(1); @@ -56,8 +58,9 @@ "-C", root, // affects the --git-dir argument "--git-dir", ".git", // affected by the -C argument "rev-parse", "HEAD", }); - const git_rev = std.mem.trim(u8, git_rev_untrimmed, " \n\r"); + defer init.gpa.free(git_rev_untrimmed); + const git_rev = try init.gpa.dupe(u8, std.mem.trim(u8, git_rev_untrimmed, " \n\r")); return git_rev; } @@ -71,9 +74,7 @@ .stderr = .ignore, }); var stdout_reader = child.stdout.?.readerStreaming(init.io, &.{}); - const stdout = stdout_reader.interface.allocRemaining(init.gpa, .limited(0x100)) catch { - return error.ReadFailure; - }; + const stdout = stdout_reader.interface.allocRemaining(init.gpa, .limited(0x100)) catch return error.ReadFailure; errdefer init.gpa.free(stdout); const term = try child.wait(init.io); diff --git a/src/root.zig b/src/root.zig --- a/src/root.zig +++ b/src/root.zig @@ -238,6 +238,7 @@ pub fn add_redirects() !void { const root = try std.Io.Dir.openDirAbsolute(io, config.root, .{}); const contents = try helpers.read_file(allocator, root, "redirect.txt"); + defer allocator.free(contents); var it = std.mem.splitScalar(u8, contents, '\n'); while (it.next()) |x| {