ls but with io_uring

fmt: user/group fallback to decimal uid/guid

rockorager.dev b7d346d4 09e1ec33

verified
+20 -4
+20 -4
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).?; 405 - const user = cmd.getUser(entry.statx.uid).?; 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", 411 + }; 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", 419 + }; 406 420 var buf: [16]u8 = undefined; 407 421 const size = try entry.humanReadableSize(&buf); 408 422 n_group = @max(n_group, group.name.len); ··· 414 428 }; 415 429 416 430 for (cmd.entries) |entry| { 417 - const user = cmd.getUser(entry.statx.uid).?; 418 - const group = cmd.getGroup(entry.statx.gid).?; 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}); 419 435 const ts = @as(i128, entry.statx.mtime.sec) * std.time.ns_per_s; 420 436 const inst: zeit.Instant = .{ .timestamp = ts, .timezone = &tz }; 421 437 const time = inst.time();