╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ ssh_helper.zig ───────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │http│ ssh │ │ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
118 119 fn copyFd(src: std.posix.fd_t, dst: std.posix.fd_t) !void { 120 var buffer: [4096]u8 = undefined; 121 while (true) { 122 const len = try std.posix.read(src, &buffer); 123 if (len == 0) break; 124 try writeAllFd(dst, buffer[0..len]); 125 } 126 } 127 128 fn writeAllFd(fd: std.posix.fd_t, bytes: []const u8) !void { 129 var written: usize = 0; 130 while (written < bytes.len) { 131 const rc = std.posix.system.write(fd, bytes[written..].ptr, bytes.len - written); 132 switch (std.posix.errno(rc)) { 133 .SUCCESS => written += @intCast(rc), 134 .INTR => continue, 135 .PIPE => return error.BrokenPipe, 136 else => return error.WriteFailed, 137 } 138 } 139 } 140