Blob Blame History Raw
--- 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);