2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 * The lpioctl system call. (pioctl is handled by the rmtsys layer and turned
12 * into either lpioctl or a remote call as appropriate.) It is kept separate
13 * to allow for the creation of the libkopenafs shared library without
14 * including the other system calls.
17 #include <afsconfig.h>
18 #include <afs/param.h>
22 #include <afs/afs_args.h>
24 #include "afssyscalls.h"
25 #include "sys_prototypes.h"
29 * in VRMIX, system calls look just like function calls, so we don't
30 * need to do anything!
33 #elif defined(AFS_SGI_ENV)
35 #pragma weak xlpioctl = lpioctl
38 lpioctl(char *path
, int cmd
, void *cmarg
, int follow
)
40 return (syscall(AFS_PIOCTL
, path
, cmd
, cmarg
, follow
));
43 #elif defined(AFS_LINUX20_ENV)
46 lpioctl(char *path
, int cmd
, void *cmarg
, int follow
)
51 rval
= proc_afs_syscall(AFSCALL_PIOCTL
, (long)path
, cmd
, (long)cmarg
,
56 errcode
= syscall(AFS_SYSCALL
, AFSCALL_PIOCTL
, path
, cmd
, cmarg
,
66 #else /* AFS_AIX32_ENV */
69 lpioctl(char *path
, int cmd
, void *cmarg
, int follow
)
72 /* As kauth/user.c says, handle smoothly the case where no AFS system call
74 void (*old
)(int) = signal(SIGSYS
, SIG_IGN
);
76 # if defined(AFS_DARWIN80_ENV) || defined(AFS_SUN511_ENV)
78 int rval
; /* rval and errcode are distinct for pioctl platforms */
79 # if defined(AFS_DARWIN80_ENV)
80 rval
= ioctl_afs_syscall(AFSCALL_PIOCTL
, (long)path
, cmd
, (long)cmarg
,
81 follow
, 0, 0, &errcode
);
82 # elif defined(AFS_SUN511_ENV)
83 rval
= ioctl_sun_afs_syscall(AFSCALL_PIOCTL
, (uintptr_t)path
, cmd
,
84 (uintptr_t)cmarg
, follow
, 0, 0, &errcode
);
85 # endif /* !AFS_DARWIN80_ENV */
86 /* non-zero rval takes precedence over errcode */
90 # else /* ! AFS_DARWIN80_ENV || AFS_SUN511_ENV */
91 errcode
= syscall(AFS_SYSCALL
, AFSCALL_PIOCTL
, path
, cmd
, cmarg
, follow
);
99 #endif /* !AFS_AIX32_ENV */