rendered paste body/* * Copyright 2000, International Business Machines Corporation and others. * All Rights Reserved. * * This software has been released under the terms of the IBM Public * License. For details, see the LICENSE file in the top-level source * directory or online at http://www.openafs.org/dl/license10.html */#include <afsconfig.h>#include <afs/param.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#include <sys/types.h>#include <sys/stat.h>#ifdef HAVE_SYS_FCNTL_H#include <sys/fcntl.h>#endif#ifdef HAVE_STDINT_H# include <stdint.h>#endif#ifdef HAVE_SYS_IOCTL_H# include <sys/ioctl.h>#endif#include <netinet/in.h>#include <afs/afs_args.h>#include <afs/cellconfig.h>#include <ctype.h>#include <afs/afssyscalls.h>#include <afs/afsutil.h>#include "AFS_component_version_number.c"intmain(int argc, char **argv){ afs_int32 code; int i, counter; afs_int32 parms[8]; int numberFlag;#ifdef AFS_LINUX20_ENV long eparm[4]; struct afsprocdata syscall_data; int fd;#endif /* AFS_LINUX20_ENV */#ifdef AFS_DARWIN80_ENV struct afssysargs syscall_data; void *ioctldata; int fd, syscallnum;# ifdef AFS_DARWIN100_ENV int is64 = 0; struct afssysargs64 syscall64_data;# endif#endif if (argc < 2) { printf("use: vsys <call number> <parms>\n"); exit(1); } numberFlag = 1; counter = 0; for (i = 1; i < argc; i++) { if (numberFlag && argv[i][0] == '-') { if (strcmp(argv[i], "-s") == 0) numberFlag = 0; else { printf("bad switch %s\n", argv[i]); exit(1); } } else if (numberFlag) { parms[counter++] = atoi(argv[i]); numberFlag = 1; } else { parms[counter++] = (intptr_t)argv[i]; numberFlag = 1; } }#ifdef AFS_LINUX20_ENV fd = open(PROC_SYSCALL_FNAME, O_RDWR); if (fd < 0) fd = open(PROC_SYSCALL_ARLA_FNAME, O_RDWR); eparm[0] = parms[3]; eparm[1] = parms[4]; eparm[2] = parms[5]; eparm[3] = parms[6]; syscall_data.syscall = AFSCALL_CALL; syscall_data.param1 = parms[0]; syscall_data.param2 = parms[1]; syscall_data.param3 = parms[2]; syscall_data.param4 = (long) eparm; printf("%s: calling syscall %d by whatever method\n", __func__, syscall_data.param1); if (fd > 0) { code = ioctl(fd, VIOC_SYSCALL, &syscall_data); close(fd); } /* else ... */#elif defined(AFS_DARWIN80_ENV) fd = open(SYSCALL_DEV_FNAME,O_RDWR);# ifdef AFS_DARWIN100_ENV if (sizeof(param1) == 8) { syscallnum = VIOC_SYSCALL64; is64 = 1; ioctldata = &syscall64_data; syscall64_data.syscall = (int)AFSCALL_CALL; syscall64_data.param1 = parms[0]; syscall64_data.param2 = parms[1]; syscall64_data.param3 = parms[2]; syscall64_data.param4 = parms[3]; syscall64_data.param5 = parms[4]; syscall64_data.param6 = parms[5]; } else {# endif /* AFS_DARWIN100_ENV */ syscallnum = VIOC_SYSCALL; ioctldata = &syscall_data; syscall_data.syscall = AFSCALL_CALL; syscall_data.param1 = parms[0]; syscall_data.param2 = parms[1]; syscall_data.param3 = parms[2]; syscall_data.param4 = parms[3]; syscall_data.param5 = parms[4]; syscall_data.param6 = parms[5];#ifdef AFS_DARWIN100_ENV }#endif if(fd >= 0) { error = ioctl(fd, syscallnum, ioctldata); close(fd); } else { error = -1; } if (!error) {#ifdef AFS_DARWIN100_ENV if (is64) error=syscall64_data.retval; else#endif error=syscall_data.retval; }#else code = syscall(AFS_SYSCALL, parms[0], parms[1], parms[2], parms[3], parms[4], parms[5]);#endif /* !AFS_LINUX20_ENV */ printf("code %d\n", code); return 0;}