authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-06-24 14:23:24 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-06-24 14:23:24 -07:00
log1749f167d4b95f613a81139cfc38cf12ca12a56e
treef633e118d709caa2150fe91c9eedaae89ea7ef35
parent23a237c9aaa5b8f5590f0db438cc00e9e1c5e1a8
signaturebadge-check Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

getHEAD: make the returned memory the same size that needs to be free'd


1 files changed, 8 insertions(+), 4 deletions(-)

git.zig+8-4
......@@ -84,7 +84,9 @@ pub fn getHEAD(alloc: std.mem.Allocator, dir: nfs.Dir) !?CommitId {
8484 const t = tracer.trace(@src(), "", .{});
8585 defer t.end();
8686
87 const h = std.mem.trimEnd(u8, try dir.readFileAlloc(alloc, "HEAD", 1024), "\n");
87 const headfile = try dir.readFileAlloc(alloc, "HEAD", 1024);
88 defer alloc.free(headfile);
89 const h = std.mem.trimEnd(u8, headfile, "\n");
8890
8991 if (std.mem.startsWith(u8, h, "ref:")) {
9092 blk: {
......@@ -95,13 +97,15 @@ pub fn getHEAD(alloc: std.mem.Allocator, dir: nfs.Dir) !?CommitId {
9597 error.ENOENT => break :blk,
9698 else => |e| return e,
9799 };
98 return ensureObjId(CommitId, std.mem.trimEnd(u8, reffile, "\n"));
100 defer alloc.free(reffile);
101 return ensureObjId(CommitId, try alloc.dupe(u8, std.mem.trimEnd(u8, reffile, "\n")));
99102 }
100103 blk: {
101104 const pckedrfs = dir.readFileAlloc(alloc, "packed-refs", 1024 * 1024 * 1024) catch |err| switch (err) {
102105 error.ENOENT => break :blk,
103106 else => |e| return e,
104107 };
108 defer alloc.free(pckedrfs);
105109 var iter = std.mem.splitScalar(u8, pckedrfs, '\n');
106110 while (iter.next()) |line| {
107111 if (std.mem.startsWith(u8, line, "#")) continue;
......@@ -111,13 +115,13 @@ pub fn getHEAD(alloc: std.mem.Allocator, dir: nfs.Dir) !?CommitId {
111115 const objid = jter.next().?;
112116 const ref = jter.next().?;
113117 std.debug.assert(jter.next() == null);
114 if (std.mem.eql(u8, h[5..], ref)) return ensureObjId(CommitId, objid);
118 if (std.mem.eql(u8, h[5..], ref)) return ensureObjId(CommitId, try alloc.dupe(u8, objid));
115119 }
116120 }
117121 return null;
118122 }
119123
120 return ensureObjId(CommitId, h);
124 return ensureObjId(CommitId, try alloc.dupe(u8, h));
121125}
122126
123127// 40 is length of sha1 hash