--- kiss/mkiss.c.orig 2008-12-05 22:01:49.000000000 +0100
+++ kiss/mkiss.c 2008-12-05 22:09:36.000000000 +0100
@@ -96,6 +96,7 @@
{
char *name; /* Interface name (/dev/???) */
int fd; /* File descriptor */
+ int is_pty;
int escaped; /* FESC received? */
u16 crc; /* Incoming frame crc */
unsigned char obuf[SIZE]; /* TX buffer */
@@ -475,6 +476,8 @@
perror("mkiss: open");
return 1;
}
+ grantpt(tty->fd);
+ tty->is_pty = !unlockpt(tty->fd);
tty->name = argv[optind];
tty_raw(tty->fd, hwflag);
@@ -502,6 +505,8 @@
perror("mkiss: open");
return 1;
}
+ grantpt(pty[i]->fd);
+ pty[i]->is_pty = !unlockpt(pty[i]->fd);
pty[i]->name = argv[optind + i + 1];
tty_raw(pty[i]->fd, FALSE);
pty[i]->optr = pty[i]->obuf;
@@ -511,9 +516,11 @@
/*
* Now all the ports are open, lock them.
*/
- tty_lock(argv[optind]);
+ if (!tty->is_pty)
+ tty_lock(argv[optind]);
for (i = 0; i < numptys; i++)
- tty_lock(argv[optind + i + 1]);
+ if (!pty[i]->is_pty)
+ tty_lock(argv[optind + i + 1]);
signal(SIGHUP, SIG_IGN);
signal(SIGUSR1, sigusr1_handler);