/*
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
*
- * @APPLE_LICENSE_HEADER_START@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
*
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
*
- * @APPLE_LICENSE_HEADER_END@
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
*/
/* Copyright (c) 1997 Apple Computer, Inc. All Rights Reserved */
/*-
*/
/*
- * mapping routines for old line discipline (yuck)
+ * Compatibility routines for BSD 4.3 tty ioctl() commands
+ *
+ * The only function externalized from this file is ttcompat() and it is
+ * externalized as private extern to prevent exporting of the symbol when
+ * KEXTs link against the kernel.
+ *
+ * Locks: All functions in this file assume that the tty_lock()
+ * is held on the tty structure before these functions are
+ * called.
*/
#include <sys/param.h>
#include <sys/sysctl.h>
#include <sys/syslog.h>
-/* NeXT Move define down here cause COMPAT_43_TTY not valid earlier */
-#if COMPAT_43_TTY || defined(COMPAT_SUNOS)
-
static int ttcompatgetflags(struct tty *tp);
static void ttcompatsetflags(struct tty *tp, struct termios *t);
static void ttcompatsetlflags(struct tty *tp, struct termios *t);
return (1); /* 50, min and not hangup */
}
+
/*
* ttsetcompat
*
* TIOCLSET -> TIOCSETA
*
* The converted command argument and potentially modified 'term'
- * argument are returned to the caller, which will then call ttioctl(),
- * if this function returns successfully.
+ * argument are returned to ttcompat(), which will then call
+ * ttioctl_locked(), if this function returns successfully.
*
* Parameters struct tty *tp The tty on which the operation is
* being performed.
* TIOCLBIC, or TIOCLSET.
*
* All other tp fields will remain unmodifed, since the struct
- * termious is a local stack copy from ttcompat(), and not the
- * real thing. A subsequent call to ttioctl() in ttcompat(),
- * however, may result in subsequent changes.
+ * termios is a local stack copy from ttcompat(), and not the
+ * real thing. A subsequent call to ttioctl_locked() in
+ * ttcompat(), however, may result in subsequent changes.
+ *
+ * WARNING: This compatibility code is not 6/432 clean; it will only
+ * work for 32 bit processes on 32 bit kernels or 64 bit
+ * processes on 64 bit kernels. We are not addressing this
+ * due to <rdar://6904053>.
*/
-__private_extern__ int
+static int
ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term)
{
switch (*com) {
* ttcompat
*
* Description: For 'set' commands, convert the command and arguments as
- * necessary, and call ttioctl(), returning the result as
- * our result; for 'get' commands, obtain the requested data
+ * necessary, and call ttioctl_locked(), returning the result
+ * as our result; for 'get' commands, obtain the requested data
* from the appropriate source, and return it in the expected
* format. If the command is not recognized, return EINVAL.
*
* terminal with no associated session,
* or for which there is a session, but
* no session leader.
- * EIOCTL If the command cannot be handled at
+ * ENOTTY If the command cannot be handled at
* this layer, this will be returned.
- * * Any value returned by ttioctl(), if a
- * set command is requested.
+ * * Any value returned by ttioctl_locked(),
+ * if a set command is requested.
*
- * NOTES: The process pointer may be a proxy on whose behalf we are
+ * Notes: The process pointer may be a proxy on whose behalf we are
* operating, so it is not safe to simply use current_process()
* instead.
*/
term = tp->t_termios;
if ((error = ttsetcompat(tp, &com, data, &term)) != 0)
return error;
- return ttioctl(tp, com, (caddr_t) &term, flag, p);
+ return ttioctl_locked(tp, com, (caddr_t) &term, flag, p);
}
case TIOCGETP:
/*
{
int ldisczero = 0;
- return (ttioctl(tp, TIOCSETD,
+ return (ttioctl_locked(tp, TIOCSETD,
*(int *)data == 2 ? (caddr_t)&ldisczero : data, flag, p));
}
* Become the console device.
*/
*(int *)data = 1;
- return (ttioctl(tp, TIOCCONS, data, flag, p));
+ return (ttioctl_locked(tp, TIOCCONS, data, flag, p));
case TIOCGSID:
/*
t->c_lflag = lflag;
t->c_cflag = cflag;
}
-#endif /* COMPAT_43_TTY || COMPAT_SUNOS */