summaryrefslogtreecommitdiffstats
path: root/sys/kern/tty_pts.c
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2006-09-27 19:57:02 +0000
committerru <ru@FreeBSD.org>2006-09-27 19:57:02 +0000
commit4ef62e4ca582414062d69e20a1ccdade4a110938 (patch)
treea886251dab8c19f71a5bfd0199ec1d9b327b3513 /sys/kern/tty_pts.c
parentf6b387ce531fb4ba91958db5aadcb53f89d4ed1b (diff)
downloadFreeBSD-src-4ef62e4ca582414062d69e20a1ccdade4a110938.zip
FreeBSD-src-4ef62e4ca582414062d69e20a1ccdade4a110938.tar.gz
Fix our ioctl(2) implementation when the argument is "int". New
ioctls passing integer arguments should use the _IOWINT() macro. This fixes a lot of ioctl's not working on sparc64, most notable being keyboard/syscons ioctls. Full ABI compatibility is provided, with the bonus of fixing the handling of old ioctls on sparc64. Reviewed by: bde (with contributions) Tested by: emax, marius MFC after: 1 week
Diffstat (limited to 'sys/kern/tty_pts.c')
-rw-r--r--sys/kern/tty_pts.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/kern/tty_pts.c b/sys/kern/tty_pts.c
index 942b77f..9b1466f 100644
--- a/sys/kern/tty_pts.c
+++ b/sys/kern/tty_pts.c
@@ -641,6 +641,10 @@ ptcioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td
{
struct tty *tp = dev->si_tty;
struct pt_desc *pt = dev->si_drv1;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ int ival;
+#endif
switch (cmd) {
@@ -710,6 +714,13 @@ ptcioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td
ndflush(&tp->t_outq, tp->t_outq.c_cc);
break;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ case _IO('t', 95):
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+ /* FALLTHROUGH */
+#endif
case TIOCSIG:
if (*(unsigned int *)data >= NSIG ||
*(unsigned int *)data == 0)
OpenPOWER on IntegriCloud