#if defined(AFS_DARWIN80_ENV)
int ioctl_afs_syscall(long syscall, long param1, long param2, long param3,
- long param4, long param5, long param6, int *rval) {
- struct afssysargs syscall_data;
- int code;
- int fd = open(SYSCALL_DEV_FNAME, O_RDWR);
- if(fd < 0)
- return -1;
-
- syscall_data.syscall = syscall;
- syscall_data.param1 = param1;
- syscall_data.param2 = param2;
- syscall_data.param3 = param3;
- syscall_data.param4 = param4;
- syscall_data.param5 = param5;
- syscall_data.param6 = param6;
-
- code = ioctl(fd, VIOC_SYSCALL, &syscall_data);
+ long param4, long param5, long param6, int *rval) {
+ struct afssysargs syscall_data;
+ void *ioctldata;
+ int code;
+ int fd = open(SYSCALL_DEV_FNAME, O_RDWR);
+ int syscallnum;
+#ifdef AFS_DARWIN100_ENV
+ struct afssysargs64 syscall64_data;
+ if (sizeof(param1) == 8) {
+ syscallnum = VIOC_SYSCALL64;
+ ioctldata = &syscall64_data;
+ syscall64_data.syscall = (int)syscall;
+ syscall64_data.param1 = param1;
+ syscall64_data.param2 = param2;
+ syscall64_data.param3 = param3;
+ syscall64_data.param4 = param4;
+ syscall64_data.param5 = param5;
+ syscall64_data.param6 = param6;
+ } else {
+#endif
+ syscallnum = VIOC_SYSCALL;
+ ioctldata = &syscall_data;
+ syscall_data.syscall = syscall;
+ syscall_data.param1 = param1;
+ syscall_data.param2 = param2;
+ syscall_data.param3 = param3;
+ syscall_data.param4 = param4;
+ syscall_data.param5 = param5;
+ syscall_data.param6 = param6;
+#ifdef AFS_DARWIN100_ENV
+ }
+#endif
+ if(fd >= 0) {
+ code = ioctl(fd, syscallnum, ioctldata);
+ close(fd);
+ } else
+ code = -1;
- close(fd);
- if (code)
- return code;
- *rval=syscall_data.retval;
- return 0;
+ if (code)
+ return code;
+#ifdef AFS_DARWIN100_ENV
+ if (sizeof(param1) == 8)
+ *rval=syscall64_data.retval;
+ else
+#endif
+ *rval=syscall_data.retval;
+ return 0;
}
#endif