summaryrefslogtreecommitdiff
path: root/core/apps/embeddedkonsole/MyPty.cpp
authorerik <erik>2007-04-20 21:21:14 (UTC)
committer erik <erik>2007-04-20 21:21:14 (UTC)
commitd07beba6b9351c6b575235522781e3ce8495e578 (patch) (unidiff)
tree8c5d9cca84d79d7d3016ceb187a1a67a8adba662 /core/apps/embeddedkonsole/MyPty.cpp
parentfb862bdc6c9a6f5b6e7529823eb4b56cc7085a59 (diff)
downloadopie-d07beba6b9351c6b575235522781e3ce8495e578.zip
opie-d07beba6b9351c6b575235522781e3ce8495e578.tar.gz
opie-d07beba6b9351c6b575235522781e3ce8495e578.tar.bz2
additional info to a comment about pty mangling
Diffstat (limited to 'core/apps/embeddedkonsole/MyPty.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/MyPty.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/core/apps/embeddedkonsole/MyPty.cpp b/core/apps/embeddedkonsole/MyPty.cpp
index 4b1ae59..c11889e 100644
--- a/core/apps/embeddedkonsole/MyPty.cpp
+++ b/core/apps/embeddedkonsole/MyPty.cpp
@@ -140,49 +140,49 @@ void MyPty::error()
140int MyPty::run(const char* cmd, QStrList &, const char*, int) 140int MyPty::run(const char* cmd, QStrList &, const char*, int)
141{ 141{
142 // This is code from the Qt DumbTerminal example 142 // This is code from the Qt DumbTerminal example
143 cpid = fork(); 143 cpid = fork();
144 144
145 if ( !cpid ) { 145 if ( !cpid ) {
146 // child - exec shell on tty 146 // child - exec shell on tty
147 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL); 147 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL);
148 148
149 // attempt to keep apm driver from killing us on power on/off 149 // attempt to keep apm driver from killing us on power on/off
150 signal(SIGSTOP, SIG_IGN); 150 signal(SIGSTOP, SIG_IGN);
151 signal(SIGCONT, SIG_IGN); 151 signal(SIGCONT, SIG_IGN);
152 signal(SIGTSTP, SIG_IGN); 152 signal(SIGTSTP, SIG_IGN);
153 153
154 int ttyfd = open(ttynam, O_RDWR); 154 int ttyfd = open(ttynam, O_RDWR);
155 dup2(ttyfd, STDIN_FILENO); 155 dup2(ttyfd, STDIN_FILENO);
156 dup2(ttyfd, STDOUT_FILENO); 156 dup2(ttyfd, STDOUT_FILENO);
157 dup2(ttyfd, STDERR_FILENO); 157 dup2(ttyfd, STDERR_FILENO);
158 // should be done with tty, so close it 158 // should be done with tty, so close it
159 close(ttyfd); 159 close(ttyfd);
160 static struct termios ttmode; 160 static struct termios ttmode;
161 if ( setsid() < 0 ) 161 if ( setsid() < 0 )
162 perror( "failed to set process group" ); 162 perror( "failed to set process group" );
163#if defined (TIOCSCTTY) 163#if defined (TIOCSCTTY)
164 // grabbed from APUE by Stevens 164 // grabbed from APUE by Stevens (see section 9.6, should be page 246)
165 ioctl(STDIN_FILENO, TIOCSCTTY, 0); 165 ioctl(STDIN_FILENO, TIOCSCTTY, 0);
166#endif 166#endif
167 tcgetattr( STDIN_FILENO, &ttmode ); 167 tcgetattr( STDIN_FILENO, &ttmode );
168 ttmode.c_cc[VINTR] = 3; 168 ttmode.c_cc[VINTR] = 3;
169 ttmode.c_cc[VERASE] = 8; 169 ttmode.c_cc[VERASE] = 8;
170 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode ); 170 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
171 171
172 if(strlen(getenv("TERM"))<=0) 172 if(strlen(getenv("TERM"))<=0)
173 setenv("TERM","vt100",1); 173 setenv("TERM","vt100",1);
174 setenv("COLORTERM","0",1); 174 setenv("COLORTERM","0",1);
175 175
176 if (getuid() == 0) { 176 if (getuid() == 0) {
177 char msg[] = "WARNING: You are running this shell as root!\n"; 177 char msg[] = "WARNING: You are running this shell as root!\n";
178 write(ttyfd, msg, sizeof(msg)); 178 write(ttyfd, msg, sizeof(msg));
179 } 179 }
180 180
181 QString ccmd = "-"+QFileInfo(cmd).fileName(); //creates a login shell 181 QString ccmd = "-"+QFileInfo(cmd).fileName(); //creates a login shell
182 182
183 execl(cmd, ccmd.latin1(), 0); 183 execl(cmd, ccmd.latin1(), 0);
184 184
185 donePty(); 185 donePty();
186 exit(-1); 186 exit(-1);
187 } 187 }
188 188