[oe-commits] org.oe.dev pty: Commit by andrew :: r3327 /trunk/src/host/qemu-neo1973/pty.c: (link)
koen commit
openembedded-commits at lists.openembedded.org
Fri Nov 2 08:52:13 UTC 2007
pty: Commit by andrew :: r3327 /trunk/src/host/qemu-neo1973/pty.c: (link)
Avoid spinning after the slave pty closes.
Author: koen at openembedded.org
Branch: org.openembedded.dev
Revision: 5b4865857cda59de90805b186b4dcfcead6b766c
ViewMTN: http://monotone.openembedded.org/revision/info/5b4865857cda59de90805b186b4dcfcead6b766c
Files:
1
packages/gsm/pty/pty.c
packages/gsm/pty_0.0.bb
Diffs:
#
# mt diff -r85c8d7e0538a936b788596afe2326dbdad0848e7 -r5b4865857cda59de90805b186b4dcfcead6b766c
#
#
#
# patch "packages/gsm/pty/pty.c"
# from [7a2613f0b781a75de9ea3f481fc8d3790867d26e]
# to [d18a16924bf69ffcba16fae826baa8d89e2a06ff]
#
# patch "packages/gsm/pty_0.0.bb"
# from [8ac2b04ce6b9a1f198e37c508f7a21b989c2d21c]
# to [8ebcd037b7b27852452c2f50a6fe1abc782476c1]
#
============================================================
--- packages/gsm/pty/pty.c 7a2613f0b781a75de9ea3f481fc8d3790867d26e
+++ packages/gsm/pty/pty.c d18a16924bf69ffcba16fae826baa8d89e2a06ff
@@ -22,6 +22,7 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
+#include <poll.h>
#define CHECK(val, name) \
if (val == -1) { \
@@ -32,7 +33,8 @@
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
-static int forward2(int in0, int out0, int in1, int out1) {
+static int forward2(int in0, int out0, int in1, int out1,
+ int (*closed)(int fd)) {
int inpos = 0, inlen = 0, outpos = 0, outlen = 0, ret, n;
fd_set rfds, wfds;
char in[0x100], out[0x100];
@@ -66,6 +68,13 @@ static int forward2(int in0, int out0, i
sizeof(out) - max(ret, outlen));
if (ret > 0)
outlen += ret;
+ if (ret < 0 && errno == EIO && closed) {
+ in1 = out0 = closed(in1);
+ if (in1 < 0)
+ return in1;
+ n = max(max(in0, in1), max(out0, out1)) + 1;
+ continue;
+ }
}
if (FD_ISSET(out0, &wfds)) {
ret = write(out0, in + inpos,
@@ -88,6 +97,19 @@ static int forward2(int in0, int out0, i
return pause();
}
+static int reopen(int fd) {
+ const char *name = ttyname(fd);
+
+ CHECK(close(fd), close(pty));
+ fd = open(name, O_RDWR | O_NOCTTY);
+ CHECK(fd, open);
+ CHECK(grantpt(fd), grantpt);
+ CHECK(unlockpt(fd), unlockpt);
+
+ fprintf(stderr, "%s\n", ptsname(fd));
+ return fd;
+}
+
int main(int argc, char *argv[], char **envp) {
int sock, fd;
struct sockaddr_in sa;
@@ -108,7 +130,7 @@ int main(int argc, char *argv[], char **
return pause();
#endif
if (argc != 3)
- return forward2(0, fd, fd, 1);
+ return forward2(0, fd, fd, 1, reopen);
#if 0
/* Connect a sub-process with a pty */
@@ -121,7 +143,7 @@ int main(int argc, char *argv[], char **
i = fileno(popen(param, O_RDWR));
CHECK(i, popen);
free(param);
- return forward2(i, fd, fd, i);
+ return forward2(i, fd, fd, i, reopen);
#endif
/* Connect a TCP socket with a pty */
@@ -137,5 +159,5 @@ int main(int argc, char *argv[], char **
CHECK(sock, socket);
CHECK(connect(sock, (struct sockaddr *) &sa, sizeof(sa)), connect);
- return forward2(sock, fd, fd, sock);
+ return forward2(sock, fd, fd, sock, reopen);
}
============================================================
--- packages/gsm/pty_0.0.bb 8ac2b04ce6b9a1f198e37c508f7a21b989c2d21c
+++ packages/gsm/pty_0.0.bb 8ebcd037b7b27852452c2f50a6fe1abc782476c1
@@ -1,5 +1,6 @@ LICENSE = "GPLv2"
DESCRIPTION = "Forwards a socket to a tty"
LICENSE = "GPLv2"
+PR = "r1"
SRC_URI = "file://pty.c"
More information about the Openembedded-commits
mailing list