- cc = MIN((int)uio_resid(uio),
- (int)sizeof(tp->t_termios));
- uiomove((caddr_t)&tp->t_termios, cc,
- uio);
+#ifdef __LP64__
+ if (uio->uio_segflg == UIO_USERSPACE32) {
+ static struct termios32 tio32;
+ cc = MIN((int)uio_resid(uio), (int)sizeof(tio32));
+ termios64to32((struct user_termios *)&tp->t_termios,
+ (struct termios32 *)&tio32);
+ uiomove((caddr_t)&tio32, cc, uio);
+#else
+ if (uio->uio_segflg == UIO_USERSPACE64) {
+ static struct user_termios tio64;
+ cc = MIN((int)uio_resid(uio), (int)sizeof(tio64));
+ termios32to64((struct termios32 *)&tp->t_termios,
+ (struct user_termios *)&tio64);
+ uiomove((caddr_t)&tio64, cc, uio);
+#endif
+ } else {
+ cc = MIN((int)uio_resid(uio), (int)sizeof(tp->t_termios));
+ uiomove((caddr_t)&tp->t_termios, cc, uio);
+ }