also add a failing shell test
This commit is contained in:
parent
67e8a1d83c
commit
e2bc4e6094
@ -43,22 +43,21 @@ const ShellPopcon = struct {
|
||||
.blob = try BoundedArray(u8, MaxShells * MaxShellLen).init(0),
|
||||
.indices = StringHashMap(u10).init(allocator),
|
||||
};
|
||||
var offset: u10 = 0;
|
||||
var fullOffset: u12 = 0;
|
||||
var idx: u10 = 0;
|
||||
while (idx < shells.len) {
|
||||
const len = @intCast(u6, shells.get(idx).len);
|
||||
try self.blob.appendSlice(shells.get(idx));
|
||||
const ourShell = self.blob.constSlice()[offset .. offset + len];
|
||||
const ourShell = self.blob.constSlice()[fullOffset .. fullOffset + len];
|
||||
try self.indices.put(ourShell, idx);
|
||||
self.index.set(idx, ShellIndex{
|
||||
.offset = offset >> 2,
|
||||
.offset = @intCast(u10, fullOffset >> 2),
|
||||
.len = len,
|
||||
});
|
||||
offset += len;
|
||||
|
||||
// Padd padding to make offset divisible by 4.
|
||||
const padding = (offset + 3) & ~@intCast(u10, 3);
|
||||
offset += padding;
|
||||
const padding = (fullOffset + 3) & ~@intCast(u12, 3);
|
||||
fullOffset += len + padding;
|
||||
try self.blob.appendNTimes(0, padding);
|
||||
idx += 1;
|
||||
}
|
||||
@ -170,15 +169,15 @@ test "basic shellpopcon" {
|
||||
try testing.expectEqual(sections.getIndex(bash).?, 2);
|
||||
try testing.expectEqual(sections.getIndex(nobody), null);
|
||||
|
||||
const longIndex = sections.getIndex(long).?;
|
||||
const start = sections.index.get(longIndex).offset << 2;
|
||||
const end = start + sections.index.get(longIndex).len;
|
||||
const gotLong = sections.blob.constSlice()[start..end];
|
||||
const idx = sections.getIndex(zsh).?;
|
||||
const start = sections.index.get(idx).offset << 2;
|
||||
const end = start + sections.index.get(idx).len;
|
||||
const got = sections.blob.constSlice()[start..end];
|
||||
|
||||
const stderr = std.io.getStdErr().writer();
|
||||
try stderr.print("\n", .{});
|
||||
|
||||
try stderr.print("gotLong: {s}\n", .{gotLong});
|
||||
try stderr.print(" long: {s}\n", .{long});
|
||||
try testing.expectEqual(gotLong, long);
|
||||
try stderr.print("gotLong: {s}\n", .{got});
|
||||
try stderr.print(" long: {s}\n", .{zsh});
|
||||
try testing.expectEqual(got, zsh);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user