Hi,
The -f option for netcat doesn't seem to be doing anything right now. It is
missing a call to pollinate() after opening the specified device file.
The patch adds back that line of pollinate().
Also make sure that the timeout handler is not armed for -f mode as -f
shouldn't timeout. File open() should just succeed or fail immediately.
From 32934abc3781f45a49f2698db788a4f0e79bd345 Mon Sep 17 00:00:00 2001
From: Yi-Yo Chiang <[email protected]>
Date: Fri, 10 May 2024 18:36:38 +0800
Subject: [PATCH] Allow netcat to communicate with serial consoles (-f)
Right now the (-f) option just opens the tty device and does nothing.
Change it so that we actually read from / write to the specified file.
Also don't arm the timeout signal handler if using (-f) mode as the
timeout option is for connecting to / listening on sockets.
If (-f) is specified then we are opening a device node, which would
just succeed or fail immediately.
Bug: 335362012
Test: adb shell netcat -f /dev/pts/0
Change-Id: I8b53c1eaa8c6363f77da5d023c86dd286e442265
---
toys/net/netcat.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/toys/net/netcat.c b/toys/net/netcat.c
index 4e76fa7f..82bce20f 100644
--- a/toys/net/netcat.c
+++ b/toys/net/netcat.c
@@ -89,12 +89,6 @@ void netcat_main(void)
TT.W = TT.W ? TT.W*1000 : -1;
TT.q = TT.q ? TT.q*1000 : -1;
- xsignal(SIGCHLD, SIG_IGN);
- if (TT.w) {
- xsignal(SIGALRM, timeout);
- alarm(TT.w);
- }
-
// The argument parsing logic can't make "<2" conditional on other
// arguments like -f and -l, so do it by hand here.
if (FLAG(f) ? toys.optc : (!FLAG(l) && !FLAG(L) && toys.optc!=2-FLAG(U)))
@@ -104,8 +98,16 @@ void netcat_main(void)
else if (FLAG(6)) family = AF_INET6;
else if (FLAG(U)) family = AF_UNIX;
- if (TT.f) in1 = out2 = xopen(TT.f, O_RDWR);
- else {
+ if (TT.f) {
+ in1 = out2 = xopen(TT.f, O_RDWR);
+ pollinate(in1, in2, out1, out2, TT.W, TT.q);
+ } else {
+ xsignal(SIGCHLD, SIG_IGN);
+ if (TT.w) {
+ xsignal(SIGALRM, timeout);
+ alarm(TT.w);
+ }
+
// Setup socket
if (!FLAG(l) && !FLAG(L)) {
char *host = toys.optargs[0];
--
2.45.0.118.g7fe29c98d7-goog
_______________________________________________
Toybox mailing list
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net