forked from pool/xiterm
113 lines
3.3 KiB
Plaintext
113 lines
3.3 KiB
Plaintext
--- lib/src/unix/tty/ttyio.c-dist 2004-04-01 17:33:27.000000000 +0200
|
|
+++ lib/src/unix/tty/ttyio.c 2004-04-02 13:03:40.174666477 +0200
|
|
@@ -11,6 +11,7 @@
|
|
|
|
#include "iterm/unix/ttyio.h"
|
|
#include "iterm/io.h"
|
|
+#include <stdio.h>
|
|
#include <termios.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sys/types.h>
|
|
@@ -266,6 +267,7 @@ static int dup_fds(int slave_fd)
|
|
}
|
|
|
|
static pid_t child; /* child process id */
|
|
+static int exit_code;
|
|
static char *tty_name;
|
|
static int tty_read(TerminalIO *tio,void *buf,int size)
|
|
{
|
|
@@ -304,7 +306,8 @@ static int tty_tell_window_size(Terminal
|
|
static void finish_child(int signal)
|
|
{
|
|
pid_t pid;
|
|
- pid = wait(NULL);
|
|
+ int status;
|
|
+ pid = wait(&status);
|
|
|
|
do {
|
|
if(pid == child || pid == ECHILD)
|
|
@@ -313,7 +316,8 @@ static void finish_child(int signal)
|
|
delete_utmp(tty_name);
|
|
break;
|
|
}
|
|
- } while((pid = waitpid(child,NULL,WNOHANG)) > 0);
|
|
+ } while((pid = waitpid(child,&status,WNOHANG)) > 0);
|
|
+ exit_code = WEXITSTATUS(status);
|
|
}
|
|
|
|
/*
|
|
@@ -421,3 +425,8 @@ int TtyTerminalIO_get_associated_fd(Term
|
|
{
|
|
return tio->concrete_io->fd;
|
|
}
|
|
+
|
|
+int TtyTerminalIO_get_exit_code(TerminalIO *tio)
|
|
+{
|
|
+ return exit_code;
|
|
+}
|
|
--- lib/src/unix/fribidi_layout/concrete_layout.c-dist 2004-04-01 17:34:20.000000000 +0200
|
|
+++ lib/src/unix/fribidi_layout/concrete_layout.c 2004-04-01 17:34:29.000000000 +0200
|
|
@@ -11,6 +11,7 @@
|
|
#include <wchar.h>
|
|
#include <stdlib.h>
|
|
#include <errno.h>
|
|
+#include <string.h>
|
|
|
|
#include "iterm/vtlayout.h"
|
|
|
|
--- lib/include/iterm/unix/ttyio.h-dist 2004-04-02 12:42:15.104005614 +0200
|
|
+++ lib/include/iterm/unix/ttyio.h 2004-04-02 12:59:56.247384732 +0200
|
|
@@ -42,4 +42,6 @@ void TtyTerminalIO_destroy(TerminalIO *t
|
|
* @param tio reference to ttyio object
|
|
*/
|
|
int TtyTerminalIO_get_associated_fd(TerminalIO *tio);
|
|
+
|
|
+int TtyTerminalIO_get_exit_code(TerminalIO *tio);
|
|
#endif
|
|
--- unix/fbiterm/src/fbiterm.h-dist 2004-04-01 17:09:59.000000000 +0200
|
|
+++ unix/fbiterm/src/fbiterm.h 2004-04-02 12:44:23.472248087 +0200
|
|
@@ -130,6 +128,7 @@ typedef struct _Iterm
|
|
int termInitialized ; /* flag to check if terminal is initialized */
|
|
int fbInitialized; /* flag to check if framebuffer is initialized */
|
|
int inputInitialized; /* flag to check if input is initialized */
|
|
+ int inheritExit; /* inherit exit code */
|
|
|
|
}
|
|
Iterm;
|
|
--- unix/fbiterm/src/term.c-dist 2004-04-02 12:29:57.000000000 +0200
|
|
+++ unix/fbiterm/src/term.c 2004-04-02 13:03:24.370258881 +0200
|
|
@@ -12,6 +12,7 @@
|
|
#include <errno.h>
|
|
|
|
#include "fbiterm.h" /* for iterm_struct */
|
|
+#include "iterm/unix/ttyio.h"
|
|
|
|
void
|
|
init_tty ()
|
|
@@ -96,9 +97,14 @@ setup_vt_handle (void)
|
|
void
|
|
clean_up ()
|
|
{
|
|
+ int status = 0;
|
|
+
|
|
+ if (pIterm && pIterm->inheritExit) {
|
|
+ status = TtyTerminalIO_get_exit_code(pIterm->tio);
|
|
+ }
|
|
/* set new keyboard control parameters for new terminal */
|
|
write(STDOUT_FILENO, "\x1b>",2); /* to switch keypad numeric modes */
|
|
- exitFbiterm(0);
|
|
+ exitFbiterm(status);
|
|
}
|
|
|
|
/* Initialize tty */
|
|
--- unix/fbiterm/src/vt.c-dist 2004-04-02 13:06:04.637758773 +0200
|
|
+++ unix/fbiterm/src/vt.c 2004-04-02 12:45:50.395542547 +0200
|
|
@@ -21,6 +21,7 @@
|
|
|
|
putenv ("TERM=iterm");
|
|
if (program_args) {
|
|
+ pIterm->inheritExit = 1;
|
|
return (TerminalIO *) TtyTerminalIO_new (pIterm->cols, pIterm->rows,
|
|
program_args[0], program_args);
|
|
}
|