summaryrefslogtreecommitdiff
path: root/packages/gsm/pty
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/gsm/pty
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'packages/gsm/pty')
-rw-r--r--packages/gsm/pty/pty.c163
1 files changed, 0 insertions, 163 deletions
diff --git a/packages/gsm/pty/pty.c b/packages/gsm/pty/pty.c
deleted file mode 100644
index 4a33d0efd3..0000000000
--- a/packages/gsm/pty/pty.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2007 OpenedHand, Ltd.
- * Contact: <andrew@o-hand.com>
- *
- * This file is licensed under the terms of GNU GPL v2.
- *
- * $ pty [<hostname|ip> <port>]
- * Opens a new pseudo terminal and forwards data between standard input
- * and the pty and between the pty and standard output. If a hostname and
- * port number are given, reads and writes to the socket instead of
- * standard input or output. Path to the slave pty is printed on standard
- * error.
- */
-#include <unistd.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <poll.h>
-
-#define CHECK(val, name) \
- if (val == -1) { \
- fprintf(stderr, #name ": %s (%i)\n", strerror(errno), errno);\
- return -errno; \
- }
-
-#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,
- int (*closed)(int fd)) {
- int inpos = 0, inlen = 0, outpos = 0, outlen = 0, ret, n;
- fd_set rfds, wfds;
- char in[0x100], out[0x100];
-
- n = max(max(in0, in1), max(out0, out1)) + 1;
- while (1) {
- FD_ZERO(&rfds);
- FD_ZERO(&wfds);
- if (inlen < sizeof(in))
- FD_SET(in0, &rfds);
- if (outlen < sizeof(out))
- FD_SET(in1, &rfds);
- if (inlen)
- FD_SET(out0, &wfds);
- if (outlen)
- FD_SET(out1, &wfds);
- CHECK(select(n, &rfds, &wfds, 0, 0), select);
-
- if (FD_ISSET(in0, &rfds)) {
- ret = (inpos + inlen) & (sizeof(in) - 1);
- ret = read(in0, in + ret,
- sizeof(in) - max(ret, inlen));
- CHECK(ret, read(0));
- if (!ret)
- return 0;
- inlen += ret;
- }
- if (FD_ISSET(in1, &rfds)) {
- ret = (outpos + outlen) & (sizeof(out) - 1);
- ret = read(in1, out + ret,
- 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,
- min(sizeof(in) - inpos, inlen));
- CHECK(ret, write(pty));
- inlen -= ret;
- inpos += ret;
- inpos &= sizeof(in) - 1;
- }
- if (FD_ISSET(out1, &wfds)) {
- ret = write(out1, out + outpos,
- min(sizeof(out) - outpos, outlen));
- CHECK(ret, write(1));
- outlen -= ret;
- outpos += ret;
- outpos &= sizeof(out) - 1;
- }
- }
-
- 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;
- struct hostent *hi;
-
- fd = posix_openpt(O_RDWR | O_NOCTTY);
- CHECK(fd, open);
- CHECK(grantpt(fd), grantpt);
- CHECK(unlockpt(fd), unlockpt);
-
- fprintf(stderr, "%s\n", ptsname(fd));
-#if 0
- /* Connect stdin & stdout with a pty */
- CHECK(close(0), close(0));
- CHECK(close(1), close(1));
- CHECK(dup(fd), dup(0));
- CHECK(dup(fd), dup(1));
- return pause();
-#endif
- if (argc != 3)
- return forward2(0, fd, fd, 1, reopen);
-
-#if 0
- /* Connect a sub-process with a pty */
- for (len = 0, i = 1; i < argc; i ++)
- len += strlen(argv[i]) + 4;
- param = malloc(len);
- strcpy(param, argv[1]);
- for (i = 2; i < argc; i ++)
- sprintf(param + strlen(param), " \"%s\"", argv[i]);
- i = fileno(popen(param, O_RDWR));
- CHECK(i, popen);
- free(param);
- return forward2(i, fd, fd, i, reopen);
-#endif
-
- /* Connect a TCP socket with a pty */
- hi = gethostbyname(argv[1]);
- if (!hi) {
- errno = h_errno;
- CHECK(-1, gethostbyname);
- }
- sa.sin_family = hi->h_addrtype;
- memcpy(&sa.sin_addr.s_addr, hi->h_addr_list[0], hi->h_length);
- sa.sin_port = htons(strtol(argv[2], 0, 0));
- sock = socket(AF_INET, SOCK_STREAM, 0);
-
- CHECK(sock, socket);
- CHECK(connect(sock, (struct sockaddr *) &sa, sizeof(sa)), connect);
- return forward2(sock, fd, fd, sock, reopen);
-}