ls but with io_uring

build: update for zig 0.15.1

rockorager.dev a9cfda7e 0251e76c

verified
+41 -33
+6 -6
build.zig.zon
··· 7 7 8 8 .dependencies = .{ 9 9 .ourio = .{ 10 - .url = "git+https://github.com/rockorager/ourio#c94a93d34c0b0082facdabc12b6b997f7ee8b648", 11 - .hash = "ourio-0.0.0-_s-z0S0XAgB2nng8oxDng5AlACiqMTcFGq77494HMBXw", 10 + .url = "git+https://github.com/rockorager/ourio#07bf94db87a9aea70d6e1a1dd99cac6fb9d38b35", 11 + .hash = "ourio-0.0.0-_s-z0Z0XAgBU_BFjdY8QjGhJ8vcdIONPSErlYRwLoxfg", 12 12 }, 13 13 .zeit = .{ 14 - .url = "git+https://github.com/rockorager/zeit#4496d1c40b2223c22a1341e175fc2ecd94cc0de9", 15 - .hash = "zeit-0.6.0-5I6bk1J1AgA13rteb6E0steXiOUKBYTzJZMMIuK9oEmb", 14 + .url = "git+https://github.com/rockorager/zeit#74be5a2afb346b2a6a6349abbb609e89ec7e65a6", 15 + .hash = "zeit-0.6.0-5I6bk4t8AgCP0UGGHVF_khlmWZkAF5XtfQWEKCyLoptU", 16 16 }, 17 17 .zzdoc = .{ 18 - .url = "git+https://github.com/rockorager/zzdoc#57e86eb4e621bc4a96fbe0dd89ad0986db6d0483", 19 - .hash = "zzdoc-0.0.0-tzT1PuPZAACr1jIJxjTrdOsLbfXS6idWFGfTq0gwxJiv", 18 + .url = "git+https://github.com/rockorager/zzdoc#a54223bdc13a80839ccf9f473edf3a171e777946", 19 + .hash = "zzdoc-0.0.0-tzT1Ph7cAAC5YmXQXiBJHAg41_A5AUAC5VOm7ShnUxlz", 20 20 }, 21 21 }, 22 22 .paths = .{
+35 -27
src/main.zig
··· 152 152 153 153 var cmd: Command = .{ .arena = allocator }; 154 154 155 - cmd.opts.winsize = getWinsize(std.io.getStdOut().handle); 155 + cmd.opts.winsize = getWinsize(std.fs.File.stdout().handle); 156 156 157 157 cmd.opts.shortview = if (cmd.opts.isatty()) .columns else .oneline; 158 158 159 - const stdout = std.io.getStdOut().writer(); 160 - const stderr = std.io.getStdErr().writer(); 161 - var bw = std.io.bufferedWriter(stdout); 159 + var stdout_buf: [4096]u8 = undefined; 160 + var stderr_buf: [4096]u8 = undefined; 161 + var stdout_writer = std.fs.File.stdout().writer(&stdout_buf); 162 + var stderr_writer = std.fs.File.stderr().writer(&stderr_buf); 163 + var stdout = &stdout_writer.interface; 164 + var stderr = &stderr_writer.interface; 162 165 163 166 var args = std.process.args(); 164 167 // skip binary ··· 261 264 } else if (eql(opt, "help")) { 262 265 return stderr.writeAll(usage); 263 266 } else if (eql(opt, "version")) { 264 - try bw.writer().print("lsr {s}\r\n", .{build_options.version}); 265 - try bw.flush(); 267 + try stdout.print("lsr {s}\r\n", .{build_options.version}); 268 + try stdout.flush(); 266 269 return; 267 270 } else { 268 271 try stderr.print("Invalid opt: '{s}'\n", .{opt}); ··· 326 329 327 330 if (cmd.entries.len == 0) { 328 331 if (multiple_dirs and dir_idx < cmd.opts.directories.items.len - 1) { 329 - try bw.writer().writeAll("\r\n"); 332 + try stdout.writeAll("\r\n"); 330 333 } 331 334 continue; 332 335 } ··· 338 341 } 339 342 340 343 if (multiple_dirs and !cmd.opts.tree) { 341 - if (dir_idx > 0) try bw.writer().writeAll("\r\n"); 342 - try bw.writer().print("{s}:\r\n", .{directory}); 344 + if (dir_idx > 0) try stdout.writeAll("\r\n"); 345 + try stdout.print("{s}:\r\n", .{directory}); 343 346 } 344 347 345 348 if (cmd.opts.tree) { 346 - if (multiple_dirs and dir_idx > 0) try bw.writer().writeAll("\r\n"); 347 - try printTree(cmd, bw.writer()); 349 + if (multiple_dirs and dir_idx > 0) try stdout.writeAll("\r\n"); 350 + try printTree(cmd, stdout); 348 351 } else if (cmd.opts.long) { 349 - try printLong(&cmd, bw.writer()); 352 + try printLong(&cmd, stdout); 350 353 } else switch (cmd.opts.shortview) { 351 - .columns => try printShortColumns(cmd, bw.writer()), 352 - .oneline => try printShortOnePerLine(cmd, bw.writer()), 354 + .columns => try printShortColumns(cmd, stdout), 355 + .oneline => try printShortOnePerLine(cmd, stdout), 353 356 } 354 357 } 355 - try bw.flush(); 358 + try stdout.flush(); 356 359 } 357 360 358 361 fn printShortColumns(cmd: Command, writer: anytype) !void { ··· 429 432 430 433 if (i < columns.items.len - 1) { 431 434 const spaces = column.width - (icon_width + entry.name.len); 432 - try writer.writeByteNTimes(' ', spaces); 435 + var space_buf = [_][]const u8{" "}; 436 + try writer.writeSplatAll(&space_buf, spaces); 433 437 } 434 438 } 435 439 try writer.writeAll("\r\n"); ··· 519 523 try writer.print("{s}\n", .{dir_name}); 520 524 521 525 const max_depth = cmd.opts.tree_depth orelse std.math.maxInt(usize); 522 - var prefix_list = std.ArrayList(bool).init(cmd.arena); 526 + var prefix_list: std.ArrayList(bool) = .{}; 523 527 524 528 for (cmd.entries, 0..) |entry, i| { 525 529 const is_last = i == cmd.entries.len - 1; ··· 531 535 if (entry.kind == .directory and max_depth > 0) { 532 536 const full_path = try std.fs.path.joinZ(cmd.arena, &.{ cmd.current_directory, entry.name }); 533 537 534 - try prefix_list.append(is_last); 538 + try prefix_list.append(cmd.arena, is_last); 535 539 try recurseTree(cmd, writer, full_path, &prefix_list, 1, max_depth); 536 540 537 541 _ = prefix_list.pop(); ··· 545 549 }; 546 550 defer dir.close(); 547 551 548 - var entries = std.ArrayList(Entry).init(cmd.arena); 552 + var entries: std.ArrayList(Entry) = .{}; 549 553 var iter = dir.iterate(); 550 554 551 555 while (try iter.next()) |dirent| { 552 556 if (!cmd.opts.showDotfiles() and std.mem.startsWith(u8, dirent.name, ".")) continue; 553 557 554 558 const nameZ = try cmd.arena.dupeZ(u8, dirent.name); 555 - try entries.append(.{ 559 + try entries.append(cmd.arena, .{ 556 560 .name = nameZ, 557 561 .kind = dirent.kind, 558 562 .statx = undefined, ··· 575 579 if (entry.kind == .directory and depth < max_depth) { 576 580 const full_path = try std.fs.path.joinZ(cmd.arena, &.{ dir_path, entry.name }); 577 581 578 - try prefix_list.append(is_last); 582 + try prefix_list.append(cmd.arena, is_last); 579 583 try recurseTree(cmd, writer, full_path, prefix_list, depth + 1, max_depth); 580 584 581 585 _ = prefix_list.pop(); ··· 690 694 try writer.writeAll(&mode); 691 695 try writer.writeByte(' '); 692 696 try writer.writeAll(user.name); 693 - try writer.writeByteNTimes(' ', longest_user - user.name.len); 697 + var space_buf1 = [_][]const u8{" "}; 698 + try writer.writeSplatAll(&space_buf1, longest_user - user.name.len); 694 699 try writer.writeByte(' '); 695 700 try writer.writeAll(group.name); 696 - try writer.writeByteNTimes(' ', longest_group - group.name.len); 701 + var space_buf2 = [_][]const u8{" "}; 702 + try writer.writeSplatAll(&space_buf2, longest_group - group.name.len); 697 703 try writer.writeByte(' '); 698 704 699 705 var size_buf: [16]u8 = undefined; 700 706 const size = try entry.humanReadableSize(&size_buf); 701 707 const suffix = entry.humanReadableSuffix(); 702 708 703 - try writer.writeByteNTimes(' ', longest_size - size.len); 709 + var space_buf3 = [_][]const u8{" "}; 710 + try writer.writeSplatAll(&space_buf3, longest_size - size.len); 704 711 try writer.writeAll(size); 705 712 try writer.writeByte(' '); 706 713 try writer.writeAll(suffix); 707 - try writer.writeByteNTimes(' ', longest_suffix - suffix.len); 714 + var space_buf4 = [_][]const u8{" "}; 715 + try writer.writeSplatAll(&space_buf4, longest_suffix - suffix.len); 708 716 try writer.writeByte(' '); 709 717 710 718 try writer.print("{d: >2} {s} ", .{ ··· 1109 1117 const n = try result.read; 1110 1118 _ = try io.close(task.req.read.fd, .{}); 1111 1119 const bytes = task.req.read.buffer[0..n]; 1112 - var fbs = std.io.fixedBufferStream(bytes); 1113 - const tz = try zeit.timezone.TZInfo.parse(cmd.arena, fbs.reader()); 1120 + var reader = std.Io.Reader.fixed(bytes); 1121 + const tz = try zeit.timezone.TZInfo.parse(cmd.arena, &reader); 1114 1122 cmd.tz = .{ .tzinfo = tz }; 1115 1123 }, 1116 1124