From: Sapan Bhatia Date: Wed, 26 Sep 2007 15:10:28 +0000 (+0000) Subject: Updated vsyssh to run as a standalone shell. X-Git-Tag: vsys-0.7-19~18 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=a00da83ae83f5f8b6927519a1b6840bcfd4256f6;p=vsys.git Updated vsyssh to run as a standalone shell. --- diff --git a/vsyssh/vsyssh.c b/vsyssh/vsyssh.c index b0377ca..7ae4deb 100644 --- a/vsyssh/vsyssh.c +++ b/vsyssh/vsyssh.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -23,7 +24,7 @@ int main(int argc, char **argv, char **envp) { - if (argc<3) { + if (argc<2) { printf("Usage: vsyssh \n"); exit(1); } @@ -45,13 +46,40 @@ int main(int argc, char **argv, char **envp) exit(1); } - close(0); - close(1); + + if (argc<3) { + fd_set set; + FD_ZERO(&set); + FD_SET(0,&set); + FD_SET(vfd0,&set); + while (1) { + int ret; + ret = select(2, &set, NULL, NULL, NULL); + if (FD_ISSET(0,&set)) { + char lineread[2048]; + int ret; + ret=read(0,lineread,2048); + write(vfd1,lineread,ret); + FD_CLR(0,&set); + } + else if (FD_ISSET(vfd0,&set)) { + char lineread[2048]; + int ret; + ret=read(vfd0,lineread,2048); + write(1,lineread,ret); + FD_CLR(vfd0,&set); + } + } - dup2(vfd0,0); - dup2(vfd1,1); + } + else { + close(0); + close(1); - execve(argv[3],argv+3,envp); + dup2(vfd0,0); + dup2(vfd1,1); + execve(argv[3],argv+3,envp); + } } return;