From: Alan Cox Date: Sat, 9 Jan 2016 21:00:32 +0000 (+0000) Subject: tty: Fix O_NOCTTY handling X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=5ed6abf8570f3fa9a2c0caf053ef5b709c970c57;p=FUZIX.git tty: Fix O_NOCTTY handling Finally we get the right process groups in the right places and init does what we expect --- diff --git a/Kernel/include/kernel.h b/Kernel/include/kernel.h index 20a71ac8..4d8d5399 100644 --- a/Kernel/include/kernel.h +++ b/Kernel/include/kernel.h @@ -776,7 +776,7 @@ extern void readi(inoptr ino, uint8_t flag); extern void writei(inoptr ino, uint8_t flag); extern int16_t doclose (uint8_t uindex); extern inoptr rwsetup (bool is_read, uint8_t *flag); -extern int dev_openi(inoptr *ino, uint8_t flag); +extern int dev_openi(inoptr *ino, uint16_t flag); extern void sync(void); /* mm.c */ diff --git a/Kernel/include/tty.h b/Kernel/include/tty.h index 249a924b..c7e31683 100644 --- a/Kernel/include/tty.h +++ b/Kernel/include/tty.h @@ -198,7 +198,7 @@ extern int tty_close(uint8_t minor); extern int tty_ioctl(uint8_t minor, uarg_t request, char *data); extern void tty_exit(void); -extern void tty_post(inoptr ino, uint8_t minor, uint8_t flag); +extern void tty_post(inoptr ino, uint8_t minor, uint16_t flag); extern void tty_hangup(uint8_t minor); extern void tty_carrier_drop(uint8_t minor); diff --git a/Kernel/inode.c b/Kernel/inode.c index d7b13d60..efc22ff7 100644 --- a/Kernel/inode.c +++ b/Kernel/inode.c @@ -299,7 +299,7 @@ inoptr rwsetup(bool is_read, uint8_t * flag) * * FIXME. Need so IS_TTY(dev) defines too and minor(x) etc */ -int dev_openi(inoptr *ino, uint8_t flag) +int dev_openi(inoptr *ino, uint16_t flag) { int ret; uint16_t da = (*ino)->c_node.i_addr[0]; diff --git a/Kernel/tty.c b/Kernel/tty.c index f3822ee1..4e9996ea 100644 --- a/Kernel/tty.c +++ b/Kernel/tty.c @@ -165,7 +165,7 @@ int tty_open(uint8_t minor, uint16_t flag) } /* Post processing for a successful tty open */ -void tty_post(inoptr ino, uint8_t minor, uint8_t flag) +void tty_post(inoptr ino, uint8_t minor, uint16_t flag) { struct tty *t = &ttydata[minor]; irqflags_t irq = di(); @@ -177,6 +177,10 @@ void tty_post(inoptr ino, uint8_t minor, uint8_t flag) udata.u_ptab->p_tty = minor; udata.u_ctty = ino; t->pgrp = udata.u_ptab->p_pgrp; +#ifdef DEBUG + kprintf("setting tty %d pgrp to %d for pid %d\n", + minor, t->pgrp, udata.u_ptab->p_pid); +#endif } irqrestore(irq); } @@ -190,10 +194,16 @@ int tty_close(uint8_t minor) if (minor == udata.u_ptab->p_tty) { udata.u_ptab->p_tty = 0; udata.u_ctty = NULL; +#ifdef DEBUG + kprintf("pid %d loses controller\n", udata.u_ptab->p_pid); +#endif } t->pgrp = 0; /* If we were hung up then the last opener has gone away */ t->flag &= ~TTYF_DEAD; +#ifdef DEBUG + kprintf("tty %d last close\n", minor); +#endif return (0); }