macos 10.6 64 bit support
[openafs.git] / src / sys / glue.c
index f2c2d2c..fea5a2f 100644 (file)
@@ -51,27 +51,52 @@ int proc_afs_syscall(long syscall, long param1, long param2, long param3,
 
 #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