Deleted Added
full compact
2c2
< * Copyright (c) 1995 - 2000, 2002 Kungliga Tekniska H�gskolan
---
> * Copyright (c) 1995 - 2000, 2002, 2004 Kungliga Tekniska H�gskolan
36c36
< RCSID("$Id: afssys.c,v 1.69 2003/03/18 04:18:45 lha Exp $");
---
> RCSID("$Id: afssys.c,v 1.69.2.2 2004/06/22 14:29:48 lha Exp $");
37a38,47
> struct procdata {
> unsigned long param4;
> unsigned long param3;
> unsigned long param2;
> unsigned long param1;
> unsigned long syscall;
> };
> #define VIOC_SYSCALL _IOW('C', 1, void *)
>
>
45,46c55,57
< #define AIX_ENTRY_POINTS 5
< #define UNKNOWN_ENTRY_POINT 6
---
> #define LINUX_PROC_POINT 5
> #define AIX_ENTRY_POINTS 6
> #define UNKNOWN_ENTRY_POINT 7
48a60
> static char *afs_procpath;
134a147,177
> static int
> try_proc(const char *path)
> {
> int fd;
> fd = open(path, O_RDWR);
> if (fd < 0)
> return 1;
> close(fd);
> afs_procpath = strdup(path);
> if (afs_procpath == NULL)
> return 1;
> afs_entry_point = LINUX_PROC_POINT;
> return 0;
> }
>
> static int
> do_proc(struct procdata *data)
> {
> int fd, ret, saved_errno;
> fd = open(afs_procpath, O_RDWR);
> if (fd < 0) {
> errno = EINVAL;
> return -1;
> }
> ret = ioctl(fd, VIOC_SYSCALL, data);
> saved_errno = errno;
> close(fd);
> errno = saved_errno;
> return ret;
> }
>
154a198,205
> case LINUX_PROC_POINT: {
> struct procdata data = { 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_proc(&data);
> }
159,160c210
< }
<
---
> }
202a253,256
> case LINUX_PROC_POINT: {
> struct procdata data = { 0, 0, 0, 0, AFSCALL_SETPAG };
> return do_proc(&data);
> }
390a445,451
> if (try_proc("/proc/fs/openafs/afs_ioctl") == 0)
> goto done;
> if (try_proc("/proc/fs/nnpfs/afs_ioctl") == 0)
> goto done;
> if (env && try_proc(env) == 0)
> goto done;
>