From 9ba23d7da873929924567d1b9f8ff03543bd496b Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Mon, 24 Sep 2012 21:28:04 -0700 Subject: [PATCH] guess some code for SUN_PROC_POINT --- lib/kafs/afssys.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/lib/kafs/afssys.c b/lib/kafs/afssys.c index ba492ff69..fe37c346b 100644 --- a/lib/kafs/afssys.c +++ b/lib/kafs/afssys.c @@ -65,6 +65,32 @@ struct devdata { #define VIOC_SYSCALL_DEV_OPENAFS _IOWR('C', 1, struct devdata) #endif +#ifdef _IOW +#ifdef _ILP32 +struct sundevdata { + uint32_t param6; + uint32_t param5; + uint32_t param4; + uint32_t param3; + uint32_t param2; + uint32_t param1; + uint32_t syscall; +}; +#define VIOC_SUN_SYSCALL_DEV _IOW('C', 2, struct sundevdata) +#else +struct sundevdata { + uint64_t param6; + uint64_t param5; + uint64_t param4; + uint64_t param3; + uint64_t param2; + uint64_t param1; + uint64_t syscall; +}; +#define VIOC_SUN_SYSCALL_DEV _IOW('C', 1, struct sundevdata) +#endif +#endif /* _IOW */ + int _kafs_debug; /* this should be done in a better way */ @@ -77,6 +103,7 @@ int _kafs_debug; /* this should be done in a better way */ #define LINUX_PROC_POINT 5 #define AIX_ENTRY_POINTS 6 #define MACOS_DEV_POINT 7 +#define SUN_PROC_POINT 8 static int afs_entry_point = UNKNOWN_ENTRY_POINT; static int afs_syscalls[2]; @@ -192,6 +219,12 @@ try_ioctlpath(const char *path, unsigned long ioctlnum, int entrypoint) ret = ioctl(fd, ioctlnum, &data); break; } + case SUN_PROC_POINT: { + struct sundevdata data = { 0, 0, 0, 0, 0, 0, AFSCALL_PIOCTL }; + data.param2 = (unsigned long)VIOCGETTOK; + ret = ioctl(fd, ioctlnum, &data); + break; + } default: abort(); } @@ -273,6 +306,14 @@ k_pioctl(char *a_path, return data.retval; } + case SUN_PROC_POINT: { + struct sundevdata data = { 0, 0, 0, 0, 0, 0, AFSCALL_PIOCTL }; + data.param1 = (unsigned long)a_path; + data.param2 = (unsigned long)o_opcode; + data.param3 = (unsigned long)a_paramsP; + data.param4 = (unsigned long)a_followSymlinks; + return do_ioctl(&data); + } #ifdef _AIX case AIX_ENTRY_POINTS: return Pioctl(a_path, o_opcode, a_paramsP, a_followSymlinks); @@ -331,6 +372,10 @@ k_setpag(void) return ret; return data.retval; } + case SUN_PROC_POINT: { + struct sundevdata data = { 0, 0, 0, 0, 0, 0, AFSCALL_SETPAG }; + return do_ioctl(&data); + } #ifdef _AIX case AIX_ENTRY_POINTS: return Setpag(); @@ -478,6 +523,12 @@ k_hasafs(void) if (ret == 0) goto done; #endif +#ifdef VIOC_SUN_SYSCALL_DEV + ret = try_ioctlpath("/dev/afs", VIOC_SUN_SYSCALL_DEV, SUN_PROC_POINT); + if (ret == 0) + goto done; +#endif + #if defined(AFS_SYSCALL) || defined(AFS_SYSCALL2) || defined(AFS_SYSCALL3) {