╭ changed ─────────╮ │src/ssh_helper.zig│ ╰──────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────────────────────────────────────────────╮ │24 options: Options, │ │25 environ_map: *std.process.Environ.Map, │ │26 ) !void { │ │27 + if (builtin.os.tag == .windows) { │ │28 + return error.WindowsNotSupported; │ │29 + } │ │30 + │ │31 const command = try resolveCommand(allocator, options, environ_map);│ │32 defer command.deinit(allocator); │ │33 │ ╰────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────╮ │37 defer stream.close(io); │ │38 │ │39 var send_buffer = [_]u8{0} ** 1024; │ │36 - var recv_buffer = [_]u8{0} ** 1024; │ │40 var stream_writer = stream.writer(io, &send_buffer); │ │38 - var stream_reader = stream.reader(io, &recv_buffer); │ │41 │ │42 try stream_writer.interface.print( │ │43 "haxy-ssh-helper-v1\nservice={s}\nprotocol={s}\nrepo-length={d}\n\n",│ ╰─────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │45 ); │ │46 try stream_writer.interface.writeAll(command.dir); │ │47 try stream_writer.interface.flush(); │ │46 - │ │47 - if (builtin.os.tag == .windows) { │ │48 - var stdin_buffer = [_]u8{0} ** 1024; │ │49 - var stdin_reader = std.Io.File.stdin().reader(io, &stdin_buffer); │ │50 - │ │51 - const CopyIn = struct { │ │52 - io: std.Io, │ │53 - stream: std.Io.net.Stream, │ │54 - reader: *std.Io.Reader, │ │55 - writer: *std.Io.Writer, │ │56 - │ │57 - fn run(ctx: @This()) void { │ │58 - copy(ctx.reader, ctx.writer) catch {}; │ │59 - ctx.writer.flush() catch {}; │ │60 - ctx.stream.shutdown(ctx.io, .send) catch {}; │ │61 - } │ │62 - }; │ │63 - const stdin_thread = try std.Thread.spawn(.{}, CopyIn.run, .{CopyIn{ │ │64 - .io = io, │ │65 - .stream = stream, │ │66 - .reader = &stdin_reader.interface, │ │67 - .writer = &stream_writer.interface, │ │68 - }}); │ │69 - stdin_thread.detach(); │ │48 │ │71 - var stdout_buffer = [_]u8{0} ** 1024; │ │72 - var stdout_writer = std.Io.File.stdout().writer(io, &stdout_buffer); │ │73 - try copy(&stream_reader.interface, &stdout_writer.interface); │ │74 - try stdout_writer.interface.flush(); │ │75 - } else { │ │76 - const CopyIn = struct { │ │77 - io: std.Io, │ │78 - stream: std.Io.net.Stream, │ │49 + const CopyIn = struct { │ │50 + io: std.Io, │ │51 + stream: std.Io.net.Stream, │ │52 │ │80 - fn run(ctx: @This()) void { │ │81 - copyFd(std.posix.STDIN_FILENO, ctx.stream.socket.handle) catch {}; │ │82 - ctx.stream.shutdown(ctx.io, .send) catch {}; │ │83 - } │ │84 - }; │ │85 - const stdin_thread = try std.Thread.spawn(.{}, CopyIn.run, .{CopyIn{ .io = io, .stream = stream }});│ │86 - stdin_thread.detach(); │ │53 + fn run(ctx: @This()) void { │ │54 + copyFd(std.posix.STDIN_FILENO, ctx.stream.socket.handle) catch {}; │ │55 + ctx.stream.shutdown(ctx.io, .send) catch {}; │ │56 + } │ │57 + }; │ │58 + const stdin_thread = try std.Thread.spawn(.{}, CopyIn.run, .{CopyIn{ .io = io, .stream = stream }}); │ │59 + stdin_thread.detach(); │ │60 │ │88 - try copyFd(stream.socket.handle, std.posix.STDOUT_FILENO); │ │89 - } │ │61 + try copyFd(stream.socket.handle, std.posix.STDOUT_FILENO); │ │62 } │ │63 │ │64 const Command = struct { │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯