Use an anonymous pointer for lpioctl
[openafs.git] / src / sys / pioctl.c
index 9260c06..06c2bcc 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <afsconfig.h>
 #include <afs/param.h>
+#include <signal.h>
 
 #include <afs/afs_args.h>
 #if defined(AFS_SUN_ENV) && !defined(AFS_SUN5_ENV)
 #else
 #include <stdio.h>
 #endif
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
 #include "afssyscalls.h"
+#include "sys_prototypes.h"
 
 #ifdef AFS_AIX32_ENV
 /*
@@ -37,7 +42,7 @@
 #pragma weak xlpioctl = lpioctl
 
 int
-lpioctl(char *path, int cmd, char *cmarg, int follow)
+lpioctl(char *path, int cmd, void *cmarg, int follow)
 {
     return (syscall(AFS_PIOCTL, path, cmd, cmarg, follow));
 }
@@ -45,9 +50,14 @@ lpioctl(char *path, int cmd, char *cmarg, int follow)
 #else /* AFS_SGI_ENV */
 
 int
-lpioctl(char *path, int cmd, char *cmarg, int follow)
+lpioctl(char *path, int cmd, void *cmarg, int follow)
 {
     int errcode, rval;
+#ifndef AFS_LINUX20_ENV
+    /* As kauth/user.c says, handle smoothly the case where no AFS system call
+     * exists (yet). */
+    sig_t old = signal(SIGSYS, SIG_IGN);
+#endif
 
 #if defined(AFS_LINUX20_ENV)
     rval = proc_afs_syscall(AFSCALL_PIOCTL, (long)path, cmd, (long)cmarg, 
@@ -65,6 +75,10 @@ lpioctl(char *path, int cmd, char *cmarg, int follow)
     errcode = syscall(AFS_SYSCALL, AFSCALL_PIOCTL, path, cmd, cmarg, follow);
 #endif
 
+#ifndef AFS_LINUX20_ENV
+    signal(SIGSYS, old);
+#endif
+
     return (errcode);
 }