xref: /illumos-gate/usr/src/lib/libc/port/sys/fcntl.c (revision 8fd04b8338ed5093ec2d1e668fa620b7de44c177)
1*8fd04b83SRoger A. Faulkner /*
2*8fd04b83SRoger A. Faulkner  * CDDL HEADER START
3*8fd04b83SRoger A. Faulkner  *
4*8fd04b83SRoger A. Faulkner  * The contents of this file are subject to the terms of the
5*8fd04b83SRoger A. Faulkner  * Common Development and Distribution License (the "License").
6*8fd04b83SRoger A. Faulkner  * You may not use this file except in compliance with the License.
7*8fd04b83SRoger A. Faulkner  *
8*8fd04b83SRoger A. Faulkner  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*8fd04b83SRoger A. Faulkner  * or http://www.opensolaris.org/os/licensing.
10*8fd04b83SRoger A. Faulkner  * See the License for the specific language governing permissions
11*8fd04b83SRoger A. Faulkner  * and limitations under the License.
12*8fd04b83SRoger A. Faulkner  *
13*8fd04b83SRoger A. Faulkner  * When distributing Covered Code, include this CDDL HEADER in each
14*8fd04b83SRoger A. Faulkner  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*8fd04b83SRoger A. Faulkner  * If applicable, add the following below this CDDL HEADER, with the
16*8fd04b83SRoger A. Faulkner  * fields enclosed by brackets "[]" replaced with your own identifying
17*8fd04b83SRoger A. Faulkner  * information: Portions Copyright [yyyy] [name of copyright owner]
18*8fd04b83SRoger A. Faulkner  *
19*8fd04b83SRoger A. Faulkner  * CDDL HEADER END
20*8fd04b83SRoger A. Faulkner  */
21*8fd04b83SRoger A. Faulkner 
22*8fd04b83SRoger A. Faulkner /*
23*8fd04b83SRoger A. Faulkner  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
24*8fd04b83SRoger A. Faulkner  * Use is subject to license terms.
25*8fd04b83SRoger A. Faulkner  */
26*8fd04b83SRoger A. Faulkner 
27*8fd04b83SRoger A. Faulkner /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28*8fd04b83SRoger A. Faulkner /*	  All Rights Reserved	*/
29*8fd04b83SRoger A. Faulkner 
30*8fd04b83SRoger A. Faulkner #include "lint.h"
31*8fd04b83SRoger A. Faulkner #include <sys/param.h>
32*8fd04b83SRoger A. Faulkner #include <sys/sockio.h>
33*8fd04b83SRoger A. Faulkner #include <sys/filio.h>
34*8fd04b83SRoger A. Faulkner #include <sys/file.h>
35*8fd04b83SRoger A. Faulkner #include <sys/types.h>
36*8fd04b83SRoger A. Faulkner #include <fcntl.h>
37*8fd04b83SRoger A. Faulkner #include <signal.h>
38*8fd04b83SRoger A. Faulkner #include <sys/stat.h>
39*8fd04b83SRoger A. Faulkner #include <sys/stropts.h>
40*8fd04b83SRoger A. Faulkner #include <sys/socket.h>
41*8fd04b83SRoger A. Faulkner #include <sys/stropts.h>
42*8fd04b83SRoger A. Faulkner #include <sys/stream.h>
43*8fd04b83SRoger A. Faulkner #include <sys/socketvar.h>
44*8fd04b83SRoger A. Faulkner #include <sys/syscall.h>
45*8fd04b83SRoger A. Faulkner #include <errno.h>
46*8fd04b83SRoger A. Faulkner #include <stdio.h>
47*8fd04b83SRoger A. Faulkner #include <stdarg.h>
48*8fd04b83SRoger A. Faulkner #include <unistd.h>
49*8fd04b83SRoger A. Faulkner #include <string.h>
50*8fd04b83SRoger A. Faulkner #include <stdlib.h>
51*8fd04b83SRoger A. Faulkner #include "libc.h"
52*8fd04b83SRoger A. Faulkner 
53*8fd04b83SRoger A. Faulkner #if !defined(_LP64)
54*8fd04b83SRoger A. Faulkner /*
55*8fd04b83SRoger A. Faulkner  * XXX these hacks are needed for X.25 which assumes that s_fcntl and
56*8fd04b83SRoger A. Faulkner  * s_ioctl exist in the socket library.
57*8fd04b83SRoger A. Faulkner  * There is no need for s_ioctl for other purposes.
58*8fd04b83SRoger A. Faulkner  */
59*8fd04b83SRoger A. Faulkner #pragma weak s_fcntl = __fcntl
60*8fd04b83SRoger A. Faulkner #pragma weak _s_fcntl = __fcntl
61*8fd04b83SRoger A. Faulkner int
s_ioctl(int fd,int cmd,intptr_t arg)62*8fd04b83SRoger A. Faulkner s_ioctl(int fd, int cmd, intptr_t arg)
63*8fd04b83SRoger A. Faulkner {
64*8fd04b83SRoger A. Faulkner 	return (ioctl(fd, cmd, arg));
65*8fd04b83SRoger A. Faulkner }
66*8fd04b83SRoger A. Faulkner #endif	/* _LP64 */
67*8fd04b83SRoger A. Faulkner 
68*8fd04b83SRoger A. Faulkner int
__fcntl(int fd,int cmd,...)69*8fd04b83SRoger A. Faulkner __fcntl(int fd, int cmd, ...)
70*8fd04b83SRoger A. Faulkner {
71*8fd04b83SRoger A. Faulkner 	int	res;
72*8fd04b83SRoger A. Faulkner 	int	pid;
73*8fd04b83SRoger A. Faulkner 	intptr_t arg;
74*8fd04b83SRoger A. Faulkner 	va_list ap;
75*8fd04b83SRoger A. Faulkner 
76*8fd04b83SRoger A. Faulkner 	va_start(ap, cmd);
77*8fd04b83SRoger A. Faulkner 	arg = va_arg(ap, intptr_t);
78*8fd04b83SRoger A. Faulkner 	va_end(ap);
79*8fd04b83SRoger A. Faulkner 
80*8fd04b83SRoger A. Faulkner 	switch (cmd) {
81*8fd04b83SRoger A. Faulkner 	case F_SETOWN:
82*8fd04b83SRoger A. Faulkner 		pid = (int)arg;
83*8fd04b83SRoger A. Faulkner 		return (ioctl(fd, FIOSETOWN, &pid));
84*8fd04b83SRoger A. Faulkner 
85*8fd04b83SRoger A. Faulkner 	case F_GETOWN:
86*8fd04b83SRoger A. Faulkner 		if (ioctl(fd, FIOGETOWN, &res) < 0)
87*8fd04b83SRoger A. Faulkner 			return (-1);
88*8fd04b83SRoger A. Faulkner 		return (res);
89*8fd04b83SRoger A. Faulkner 
90*8fd04b83SRoger A. Faulkner 	default:
91*8fd04b83SRoger A. Faulkner 		return (syscall(SYS_fcntl, fd, cmd, arg));
92*8fd04b83SRoger A. Faulkner 	}
93*8fd04b83SRoger A. Faulkner }
94