return true;
}
+
+ /*}}}*/
+// DPkgPM::DoStdin - Read stdin and pass to slave pty /*{{{*/
+// ---------------------------------------------------------------------
+/*
+*/
+void pkgDPkgPM::DoStdin(int master)
+{
+ char input_buf[2] = {0,0};
+ while(read(0, input_buf, 1) > 0)
+ write(master, input_buf, 1);
+}
/*}}}*/
+// DPkgPM::DoTerminalPty - Read the terminal pty and write log /*{{{*/
+// ---------------------------------------------------------------------
+/*
+ * read the terminal pty and write log
+ */
+void pkgDPkgPM::DoTerminalPty(int master, FILE *term_out)
+{
+ char term_buf[2] = {0,0};
+
+ // read a single char, make sure that the read can't block
+ // (otherwise we may leave zombies)
+ do
+ {
+ fwrite(term_buf, 1, 1, term_out);
+ write(1, term_buf, 1);
+ } while(read(master, term_buf, 1) > 0);
+}
+ /*}}}*/
+
+
+
// DPkgPM::Go - Run the sequence /*{{{*/
// ---------------------------------------------------------------------
/* This globs the operations and calls dpkg
int master;
int slave;
+ // FIXME: setup sensible signal handling (*ick*)
tcgetattr(0, &tt);
ioctl(0, TIOCGWINSZ, (char *)&win);
if (openpty(&master, &slave, NULL, &tt, &win) < 0)
char line[1024] = {0,};
char buf[2] = {0,0};
- char term_buf[2] = {0,0};
- char input_buf[2] = {0,0};
// the result of the waitpid call
int res;
else if (select_ret == 0)
continue;
- // read a single char, make sure that the read can't block
- // (otherwise we may leave zombies)
- int term_len = read(master, term_buf, 1);
- int input_len = read(0, input_buf, 1);
- int len = read(_dpkgin, buf, 1);
+ DoStdin(master);
+ DoTerminalPty(master, term_out);
+ //DoDpkgStatusFd();
- // see if we have any input that needs to go to the
- // master pty
- if(input_len > 0)
- write(master, input_buf, 1);
-
- // see if we have any output that needs to be echoed
- // and written to the log
- if(term_len > 0)
- {
- do
- {
- fwrite(term_buf, 1, 1, term_out);
- write(1, term_buf, 1);
- } while(read(master, term_buf, 1) > 0);
- term_buf[0] = 0;
- }
+ int len = read(_dpkgin, buf, 1);
// nothing to read from dpkg , wait a bit for more
if(len <= 0)