ls but with io_uring

fmt: fix group/user

rockorager.dev 578fc4ff b7d346d4

verified
+33 -22
+33 -22
src/main.zig
··· 401 401 var n_size: usize = 0; 402 402 var n_suff: usize = 0; 403 403 for (cmd.entries) |entry| { 404 - const group = cmd.getGroup(entry.statx.gid) orelse switch (entry.statx.gid) { 405 - 0...9 => "1", 406 - 10...99 => "10", 407 - 100...999 => "100", 408 - 1000...9999 => "1000", 409 - 10000...99999 => "10000", 410 - else => "1000000", 404 + const group = cmd.getGroup(entry.statx.gid); 405 + const user = cmd.getUser(entry.statx.uid); 406 + 407 + var buf: [16]u8 = undefined; 408 + const size = try entry.humanReadableSize(&buf); 409 + const group_len: usize = if (group) |g| g.name.len else switch (entry.statx.gid) { 410 + 0...9 => 1, 411 + 10...99 => 2, 412 + 100...999 => 3, 413 + 1000...9999 => 4, 414 + 10000...99999 => 5, 415 + else => 6, 411 416 }; 412 - const user = cmd.getUser(entry.statx.uid) orelse switch (entry.statx.uid) { 413 - 0...9 => "1", 414 - 10...99 => "10", 415 - 100...999 => "100", 416 - 1000...9999 => "1000", 417 - 10000...99999 => "10000", 418 - else => "1000000", 417 + 418 + const user_len: usize = if (user) |u| u.name.len else switch (entry.statx.uid) { 419 + 0...9 => 1, 420 + 10...99 => 2, 421 + 100...999 => 3, 422 + 1000...9999 => 4, 423 + 10000...99999 => 5, 424 + else => 6, 419 425 }; 420 - var buf: [16]u8 = undefined; 421 - const size = try entry.humanReadableSize(&buf); 422 - n_group = @max(n_group, group.name.len); 423 - n_user = @max(n_user, user.name.len); 426 + 427 + n_group = @max(n_group, group_len); 428 + n_user = @max(n_user, user_len); 424 429 n_size = @max(n_size, size.len); 425 430 n_suff = @max(n_suff, entry.humanReadableSuffix().len); 426 431 } ··· 428 433 }; 429 434 430 435 for (cmd.entries) |entry| { 431 - const user = cmd.getUser(entry.statx.uid) orelse 432 - try std.fmt.allocPrint(cmd.arena, "{d}", .{entry.statx.uid}); 433 - const group = cmd.getGroup(entry.statx.gid) orelse 434 - try std.fmt.allocPrint(cmd.arena, "{d}", .{entry.statx.gid}); 436 + const user: User = cmd.getUser(entry.statx.uid) orelse 437 + .{ 438 + .uid = entry.statx.uid, 439 + .name = try std.fmt.allocPrint(cmd.arena, "{d}", .{entry.statx.uid}), 440 + }; 441 + const group: Group = cmd.getGroup(entry.statx.gid) orelse 442 + .{ 443 + .gid = entry.statx.gid, 444 + .name = try std.fmt.allocPrint(cmd.arena, "{d}", .{entry.statx.gid}), 445 + }; 435 446 const ts = @as(i128, entry.statx.mtime.sec) * std.time.ns_per_s; 436 447 const inst: zeit.Instant = .{ .timestamp = ts, .timezone = &tz }; 437 448 const time = inst.time();