fix PackedUser.maxSize
This commit is contained in:
parent
b0d74c0cad
commit
22c61d1207
25
src/user.zig
25
src/user.zig
|
@ -171,6 +171,7 @@ pub const PackedUser = struct {
|
||||||
.gecos_len = gecos_len,
|
.gecos_len = gecos_len,
|
||||||
};
|
};
|
||||||
const innerBytes = mem.asBytes(&inner);
|
const innerBytes = mem.asBytes(&inner);
|
||||||
|
|
||||||
var pos: usize = buf.*.len;
|
var pos: usize = buf.*.len;
|
||||||
buf.*.len += InnerSize +
|
buf.*.len += InnerSize +
|
||||||
user.home.len +
|
user.home.len +
|
||||||
|
@ -207,9 +208,9 @@ pub const PackedUser = struct {
|
||||||
pub fn maxSize() usize {
|
pub fn maxSize() usize {
|
||||||
comptime {
|
comptime {
|
||||||
const unpadded = InnerSize +
|
const unpadded = InnerSize +
|
||||||
std.math.maxInt(u6) + // home
|
std.math.maxInt(u6) + 1 + // home
|
||||||
std.math.maxInt(u5) + // name
|
std.math.maxInt(u5) + 1 + // name
|
||||||
std.math.maxInt(u6) + // shell
|
std.math.maxInt(u6) + 1 + // shell
|
||||||
std.math.maxInt(u8); // gecos
|
std.math.maxInt(u8); // gecos
|
||||||
return pad.roundUp(u64, AlignmentBits, unpadded);
|
return pad.roundUp(u64, AlignmentBits, unpadded);
|
||||||
}
|
}
|
||||||
|
@ -323,7 +324,7 @@ test "construct PackedUser section" {
|
||||||
.name = "Name" ** 8,
|
.name = "Name" ** 8,
|
||||||
.gecos = "Gecos" ** 51,
|
.gecos = "Gecos" ** 51,
|
||||||
.home = "Home" ** 16,
|
.home = "Home" ** 16,
|
||||||
.shell = "She.l..l" ** 8,
|
.shell = "She.LllL" ** 8,
|
||||||
}, User{
|
}, User{
|
||||||
.uid = 1002,
|
.uid = 1002,
|
||||||
.gid = 1002,
|
.gid = 1002,
|
||||||
|
@ -349,3 +350,19 @@ test "construct PackedUser section" {
|
||||||
}
|
}
|
||||||
try testing.expectEqual(users.len, i);
|
try testing.expectEqual(users.len, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "PackedUser.maxSize()" {
|
||||||
|
var buf = try ArrayList(u8).initCapacity(testing.allocator, PackedUser.maxSize());
|
||||||
|
defer buf.deinit();
|
||||||
|
|
||||||
|
const largeUser = User{
|
||||||
|
.uid = math.maxInt(u32),
|
||||||
|
.gid = math.maxInt(u32),
|
||||||
|
.name = "Name" ** 8, // 32
|
||||||
|
.gecos = "Gecos" ** 51, // 255
|
||||||
|
.home = "Home" ** 16, // 64
|
||||||
|
.shell = "She.LllL" ** 8, // 64
|
||||||
|
};
|
||||||
|
try PackedUser.packTo(&buf.items, largeUser, testShellIndex);
|
||||||
|
try testing.expectEqual(PackedUser.maxSize(), buf.items.len);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue