update padded user alignment
This commit is contained in:
parent
330db487ac
commit
988ab9f6d4
@ -10,6 +10,7 @@ const StringContext = std.hash_map.StringContext;
|
|||||||
// MaxShells is the maximum number of "popular" shells.
|
// MaxShells is the maximum number of "popular" shells.
|
||||||
pub const MaxShells = 63;
|
pub const MaxShells = 63;
|
||||||
pub const MaxShellLen = 64;
|
pub const MaxShellLen = 64;
|
||||||
|
const ShellAlignment = 2; // bits
|
||||||
|
|
||||||
// ShellReader interprets "Shell Index" and "Shell Blob" sections.
|
// ShellReader interprets "Shell Index" and "Shell Blob" sections.
|
||||||
pub const ShellReader = struct {
|
pub const ShellReader = struct {
|
||||||
@ -71,7 +72,7 @@ pub const ShellWriter = struct {
|
|||||||
});
|
});
|
||||||
|
|
||||||
fullOffset += len;
|
fullOffset += len;
|
||||||
const padding = pad.roundUpPadding(u12, 2, fullOffset);
|
const padding = pad.roundUpPadding(u12, ShellAlignment, fullOffset);
|
||||||
fullOffset += padding;
|
fullOffset += padding;
|
||||||
//const stderr = std.io.getStdErr().writer();
|
//const stderr = std.io.getStdErr().writer();
|
||||||
//stderr.print("\n", .{}) catch unreachable;
|
//stderr.print("\n", .{}) catch unreachable;
|
||||||
|
26
src/user.zig
26
src/user.zig
@ -17,6 +17,7 @@ pub const PackedUser = packed struct {
|
|||||||
name_len: u5,
|
name_len: u5,
|
||||||
gecos_len: u8,
|
gecos_len: u8,
|
||||||
};
|
};
|
||||||
|
const PackedUserAlignment = 3; // bits
|
||||||
|
|
||||||
pub const User = struct {
|
pub const User = struct {
|
||||||
uid: u32,
|
uid: u32,
|
||||||
@ -46,11 +47,21 @@ pub const UserWriter = struct {
|
|||||||
|
|
||||||
const fromUserErr = error{InvalidRecord};
|
const fromUserErr = error{InvalidRecord};
|
||||||
|
|
||||||
|
pub fn downCast(comptime T: type, n: u64) fromUserErr!T {
|
||||||
|
if (std.math.cast(T, n)) |result| {
|
||||||
|
return result;
|
||||||
|
} else |err| switch (err) {
|
||||||
|
error.Overflow => {
|
||||||
|
return error.InvalidRecord;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn appendUser(self: *UserWriter, user: User) !void {
|
pub fn appendUser(self: *UserWriter, user: User) !void {
|
||||||
const home_len = cast(u6, user.home.len - 1) catch return error.InvalidRecord;
|
const home_len = try downCast(u6, user.home.len - 1);
|
||||||
const name_len = cast(u5, user.name.len - 1) catch return error.InvalidRecord;
|
const name_len = try downCast(u5, user.name.len - 1);
|
||||||
const shell_len = cast(u6, user.shell.len - 1) catch return error.InvalidRecord;
|
const shell_len = try downCast(u6, user.shell.len - 1);
|
||||||
const gecos_len = cast(u8, user.gecos.len) catch return error.InvalidRecord;
|
const gecos_len = try downCast(u8, user.gecos.len);
|
||||||
|
|
||||||
var puser = PackedUser{
|
var puser = PackedUser{
|
||||||
.uid = user.uid,
|
.uid = user.uid,
|
||||||
@ -74,8 +85,11 @@ pub const UserWriter = struct {
|
|||||||
try self.appendTo.appendSlice(user.shell);
|
try self.appendTo.appendSlice(user.shell);
|
||||||
}
|
}
|
||||||
|
|
||||||
const padding = pad.roundUpPadding(u64, 2, self.appendTo.items.len);
|
try self.appendTo.appendNTimes(0, pad.roundUpPadding(
|
||||||
try self.appendTo.appendNTimes(0, padding);
|
u64,
|
||||||
|
PackedUserAlignment,
|
||||||
|
self.appendTo.items.len,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user