summaryrefslogtreecommitdiff
path: root/usr/src/lib/libbc/libc/sys/common/syscall.c
diff options
context:
space:
mode:
authormuffin <none@none>2005-10-20 11:47:44 -0700
committermuffin <none@none>2005-10-20 11:47:44 -0700
commit5d54f3d8999eac1762fe0a8c7177d20f1f201fae (patch)
tree65c7761c305dbd97609e64517f5781b433efa980 /usr/src/lib/libbc/libc/sys/common/syscall.c
parent1b42782e10f177b2bd092559506a96dbbefefa54 (diff)
downloadillumos-gate-5d54f3d8999eac1762fe0a8c7177d20f1f201fae.tar.gz
6309237 gcc and libbc don't get along
Diffstat (limited to 'usr/src/lib/libbc/libc/sys/common/syscall.c')
-rw-r--r--usr/src/lib/libbc/libc/sys/common/syscall.c302
1 files changed, 200 insertions, 102 deletions
diff --git a/usr/src/lib/libbc/libc/sys/common/syscall.c b/usr/src/lib/libbc/libc/sys/common/syscall.c
index 93eb70df09..e81069a2fd 100644
--- a/usr/src/lib/libbc/libc/sys/common/syscall.c
+++ b/usr/src/lib/libbc/libc/sys/common/syscall.c
@@ -18,15 +18,17 @@
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
- *
+ */
+/*
* Copyright 1995 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
+
#pragma ident "%Z%%M% %I% %E% SMI"
#include <errno.h>
#include <stdio.h>
-#include <varargs.h>
+#include <stdarg.h>
#include <sys/syscall.h>
#include "xsyscall.h"
@@ -84,280 +86,344 @@ int syscallnum[190] = { SYS_syscall, SYS_exit, SYS_fork,
0, -1 /*setpgid*/, SYS_pathconf, SYS_uname,
};
-
-syscall(sysnum, va_alist)
-int sysnum;
-va_dcl
+int
+syscall(int sysnum, ...)
{
va_list ap;
int i1, i2, i3, i4;
char *c1, *c2, *c3, *c4;
+ int ret_val;
- va_start(ap);
+ va_start(ap, sysnum);
switch(sysnum) {
case XSYS_read:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
- return(bc_read(i1, c1, i2));
+ va_end(ap);
+ return (bc_read(i1, c1, i2));
case XSYS_write:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
- return(bc_write(i1, c1, i2));
+ va_end(ap);
+ return (bc_write(i1, c1, i2));
case XSYS_readv:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
- return(bc_readv(i1, c1, i2));
+ va_end(ap);
+ return (bc_readv(i1, c1, i2));
case XSYS_writev:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
- return(bc_writev(i1, c1, i2));
+ va_end(ap);
+ return (bc_writev(i1, c1, i2));
case XSYS_open:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
+ va_end(ap);
if (i2)
- return(bc_open(c1, i1, i2));
+ return (bc_open(c1, i1, i2));
else
- return(bc_open(c1, i1));
+ return (bc_open(c1, i1));
case XSYS_close:
i1 = va_arg(ap, int);
- return(bc_close(i1));
+ va_end(ap);
+ return (bc_close(i1));
case XSYS_fcntl:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
i3 = va_arg(ap, int);
- return(bc_fcntl(i1, i2, i3));
+ va_end(ap);
+ return (bc_fcntl(i1, i2, i3));
case XSYS_select:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
c3 = va_arg(ap, char *);
c4 = va_arg(ap, char *);
- return(_select(i1, c1, c2, c3, c4));
+ va_end(ap);
+ return (_select(i1, c1, c2, c3, c4));
case XSYS_ioctl :
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
c1 = va_arg(ap, char *);
- return(bc_ioctl(i1, i2, c1));
+ va_end(ap);
+ return (bc_ioctl(i1, i2, c1));
case XSYS_stat:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(bc_stat(c1, c2));
+ va_end(ap);
+ return (bc_stat(c1, c2));
case XSYS_lstat:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(bc_lstat(c1, c2));
+ va_end(ap);
+ return (bc_lstat(c1, c2));
case XSYS_fstat:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
- return(bc_fstat(i1, c1));
+ va_end(ap);
+ return (bc_fstat(i1, c1));
case XSYS_getdents:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
- return(bc_getdents(i1, c1, i2));
+ va_end(ap);
+ return (bc_getdents(i1, c1, i2));
case XSYS_kill:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(bc_kill(i1, i2));
+ va_end(ap);
+ return (bc_kill(i1, i2));
case XSYS_mount:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
i1 = va_arg(ap, int);
c3 = va_arg(ap, char *);
- return(mount(c1, c2, i1, c3));
+ va_end(ap);
+ return (mount(c1, c2, i1, c3));
case XSYS_getrlimit:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
- return(bc_getrlimit(i1, c1));
+ va_end(ap);
+ return (bc_getrlimit(i1, c1));
case XSYS_setrlimit:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
- return(bc_setrlimit(i1, c1));
+ va_end(ap);
+ return (bc_setrlimit(i1, c1));
case XSYS_uname:
c1 = va_arg(ap, char *);
- return(bc_uname(c1));
+ va_end(ap);
+ return (bc_uname(c1));
case XSYS_creat:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(creat(c1, i1));
+ va_end(ap);
+ return (creat(c1, i1));
case XSYS_unmount:
c1 = va_arg(ap, char *);
- return(umount(c1));
+ va_end(ap);
+ return (umount(c1));
case XSYS_link:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(link(c1, c2));
+ va_end(ap);
+ return (link(c1, c2));
case XSYS_unlink:
c1 = va_arg(ap, char *);
- return(unlink(c1));
+ va_end(ap);
+ return (unlink(c1));
case XSYS_chdir:
c1 = va_arg(ap, char *);
- return(chdir(c1));
+ va_end(ap);
+ return (chdir(c1));
case XSYS_mknod:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(mknod(c1, i1, i2));
+ va_end(ap);
+ return (mknod(c1, i1, i2));
case XSYS_chmod:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(chmod(c1, i1));
+ va_end(ap);
+ return (chmod(c1, i1));
case XSYS_chown:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(chown(c1, i1, i2));
+ va_end(ap);
+ return (chown(c1, i1, i2));
case XSYS_lseek:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
i3 = va_arg(ap, int);
- return(lseek(i1, i2, i3));
+ va_end(ap);
+ return (lseek(i1, i2, i3));
case XSYS_access:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(access(c1, i1));
+ va_end(ap);
+ return (access(c1, i1));
case XSYS_dup:
i1 = va_arg(ap, int);
- return(dup(i1));
+ va_end(ap);
+ return (dup(i1));
case XSYS_dup2:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(dup(i1, i2));
+ va_end(ap);
+ return (dup(i1, i2));
case XSYS_pipe:
c1 = (char *)va_arg(ap, int *);
- return(pipe(c1));
+ va_end(ap);
+ return (pipe(c1));
case XSYS_symlink:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(symlink(c1, c2));
+ va_end(ap);
+ return (symlink(c1, c2));
case XSYS_readlink:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(readlink(c1, c2, i1));
+ va_end(ap);
+ return (readlink(c1, c2, i1));
case XSYS_execve:
c1 = va_arg(ap, char *);
c2 = (char *)va_arg(ap, char **);
c3 = (char *)va_arg(ap, char **);
- return(execve(c1, c2, c3));
+ va_end(ap);
+ return (execve(c1, c2, c3));
case XSYS_chroot:
c1 = va_arg(ap, char *);
- return(chroot(c1));
+ va_end(ap);
+ return (chroot(c1));
case XSYS_getgroups:
i1 = va_arg(ap, int);
c1 = (char *)va_arg(ap, int *);
- return(getgroups(i1, c1));
+ va_end(ap);
+ return (getgroups(i1, c1));
case XSYS_setgroups:
i1 = va_arg(ap, int);
c1 = (char *)va_arg(ap, int *);
- return(setgroups(i1, c1));
+ va_end(ap);
+ return (setgroups(i1, c1));
case XSYS_fsync:
i1 = va_arg(ap, int);
- return(fsync(i1));
+ va_end(ap);
+ return (fsync(i1));
case XSYS_gettimeofday:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(gettimeofday(c1, c2));
+ va_end(ap);
+ return (gettimeofday(c1, c2));
case XSYS_settimeofday:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(settimeofday(c1, c2));
+ va_end(ap);
+ return (settimeofday(c1, c2));
case XSYS_rename:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(rename(c1, c2));
+ va_end(ap);
+ return (rename(c1, c2));
case XSYS_mkdir:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(mkdir(c1, i1));
+ va_end(ap);
+ return (mkdir(c1, i1));
case XSYS_rmdir:
c1 = va_arg(ap, char *);
- return(rmdir(c1));
+ va_end(ap);
+ return (rmdir(c1));
case XSYS_statfs:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(statfs(c1, c2));
+ va_end(ap);
+ return (statfs(c1, c2));
case XSYS_fstatfs:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
- return(fstatfs(i1, c1));
+ va_end(ap);
+ return (fstatfs(i1, c1));
case XSYS_getpagesize:
- return(getpagesize());
+ va_end(ap);
+ return (getpagesize());
case XSYS_gethostid:
- return(gethostid());
+ va_end(ap);
+ return (gethostid());
case XSYS_getdtablesize:
- return(getdtablesize());
+ va_end(ap);
+ return (getdtablesize());
case XSYS_pathconf:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(pathconf(c1, i1));
+ va_end(ap);
+ return (pathconf(c1, i1));
case XSYS_gethostname:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(gethostname(c1, i1));
+ va_end(ap);
+ return (gethostname(c1, i1));
case XSYS_sethostname:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(sethostname(c1, i1));
+ va_end(ap);
+ return (sethostname(c1, i1));
case XSYS_setreuid:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(setreuid(i1, i2));
+ va_end(ap);
+ return (setreuid(i1, i2));
case XSYS_setregid:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(setregid(i1, i2));
+ va_end(ap);
+ return (setregid(i1, i2));
case XSYS_getpriority:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(getpriority(i1, i2));
+ va_end(ap);
+ return (getpriority(i1, i2));
case XSYS_setpriority:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
i3 = va_arg(ap, int);
- return(setpriority(i1, i2, i3));
+ va_end(ap);
+ return (setpriority(i1, i2, i3));
case XSYS_sigvec:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(sigvec(i1, c1, c2));
+ va_end(ap);
+ return (sigvec(i1, c1, c2));
case XSYS_sigblock:
i1 = va_arg(ap, int);
- return(sigblock(i1));
+ va_end(ap);
+ return (sigblock(i1));
case XSYS_sigpending:
c1 = va_arg(ap, char *);
- return(sigpending(c1));
+ va_end(ap);
+ return (sigpending(c1));
case XSYS_sigsetmask:
i1 = va_arg(ap, int);
- return(sigsetmask(i1));
+ va_end(ap);
+ return (sigsetmask(i1));
case XSYS_sigpause:
c1 = va_arg(ap, char *);
- return(sigpause(c1));
+ va_end(ap);
+ return (sigpause(c1));
case XSYS_sigstack:
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(sigstack(c1, c2));
+ va_end(ap);
+ return (sigstack(c1, c2));
case XSYS_truncate:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(truncate(c1, i1));
+ va_end(ap);
+ return (truncate(c1, i1));
case XSYS_ftruncate:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(ftruncate(i1, i2));
+ va_end(ap);
+ return (ftruncate(i1, i2));
case XSYS_killpg:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(killpg(i1, i2));
+ va_end(ap);
+ return (killpg(i1, i2));
case XSYS_setpgid:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(setpgid(i1, i2));
+ va_end(ap);
+ return (setpgid(i1, i2));
case XSYS_ptrace:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
@@ -365,32 +431,40 @@ va_dcl
c1 = va_arg(ap, char *);
i4 = va_arg(ap, int);
c2 = va_arg(ap, char *);
- return(ptrace(i1, i2, i3, c1, i4, c2));
+ va_end(ap);
+ return (ptrace(i1, i2, i3, c1, i4, c2));
#ifdef S5EMUL
case XSYS_getpgrp:
- return(getpgrp());
+ va_end(ap);
+ return (getpgrp());
case XSYS_setpgrp:
- return(setpgrp());
+ va_end(ap);
+ return (setpgrp());
#else
case XSYS_getpgrp:
i1 = va_arg(ap, int);
- return(getpgrp(i1));
+ va_end(ap);
+ return (getpgrp(i1));
case XSYS_setpgrp:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(setpgrp(i1, i2));
+ va_end(ap);
+ return (setpgrp(i1, i2));
#endif
case XSYS_getrusage:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
- return(getrusage(i1, c1));
+ va_end(ap);
+ return (getrusage(i1, c1));
case XSYS_setsid:
- return(setsid());
+ va_end(ap);
+ return (setsid());
case XSYS_flock:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(flock(i1, i2));
+ va_end(ap);
+ return (flock(i1, i2));
/* the following system calls are now implemented in
* libsocket */
@@ -398,48 +472,57 @@ va_dcl
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
c2 = (char *)va_arg(ap, int *);
- return(_accept(i1, c1, c2));
+ va_end(ap);
+ return (_accept(i1, c1, c2));
case XSYS_bind:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
- return(_bind(i1, c1, i2));
+ va_end(ap);
+ return (_bind(i1, c1, i2));
case XSYS_connect:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
- return(_connect(i1, c1, i2));
+ va_end(ap);
+ return (_connect(i1, c1, i2));
case XSYS_getsockopt:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
i3 = va_arg(ap, int);
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(_getsockopt(i1, i2, i3, c1, c2));
+ va_end(ap);
+ return (_getsockopt(i1, i2, i3, c1, c2));
case XSYS_getpeername:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(_getpeername(i1, c1, c2));
+ va_end(ap);
+ return (_getpeername(i1, c1, c2));
case XSYS_getsockname:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
c2 = va_arg(ap, char *);
- return(_getsockname(i1, c1, c2));
+ va_end(ap);
+ return (_getsockname(i1, c1, c2));
case XSYS_getdomainname:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(getdomainname(c1, i1));
+ va_end(ap);
+ return (getdomainname(c1, i1));
case XSYS_listen:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(_listen(i1, i2));
+ va_end(ap);
+ return (_listen(i1, i2));
case XSYS_recv:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
i3 = va_arg(ap, int);
- return(_recv(i1, c1, i2, i3));
+ va_end(ap);
+ return (_recv(i1, c1, i2, i3));
case XSYS_recvfrom:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
@@ -447,18 +530,21 @@ va_dcl
i3 = va_arg(ap, int);
c2 = va_arg(ap, char *);
c3 = va_arg(ap, char *);
- return(_recvfrom(i1, c1, i2, i3, c2, c3));
+ va_end(ap);
+ return (_recvfrom(i1, c1, i2, i3, c2, c3));
case XSYS_recvmsg:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
- return(_recvmsg(i1, c1, i2));
+ va_end(ap);
+ return (_recvmsg(i1, c1, i2));
case XSYS_send:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
i3 = va_arg(ap, int);
- return(_send(i1, c1, i2, i3));
+ va_end(ap);
+ return (_send(i1, c1, i2, i3));
case XSYS_sendto:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
@@ -466,38 +552,45 @@ va_dcl
i3 = va_arg(ap, int);
c2 = va_arg(ap, char *);
i4 = va_arg(ap, int);
- return(_sendto(i1, c1, i2, i3, c2, i4));
+ va_end(ap);
+ return (_sendto(i1, c1, i2, i3, c2, i4));
case XSYS_sendmsg:
i1 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i2 = va_arg(ap, int);
- return(_sendmsg(i1, c1, i2));
+ va_end(ap);
+ return (_sendmsg(i1, c1, i2));
case XSYS_setdomainname:
c1 = va_arg(ap, char *);
i1 = va_arg(ap, int);
- return(setdomainname(c1 ,i1));
+ va_end(ap);
+ return (setdomainname(c1 ,i1));
case XSYS_setsockopt:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
i3 = va_arg(ap, int);
c1 = va_arg(ap, char *);
i4 = va_arg(ap, int);
- return(_setsockopt(i1, i2, i3, c1, i4));
+ va_end(ap);
+ return (_setsockopt(i1, i2, i3, c1, i4));
case XSYS_shutdown:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
- return(_shutdown(i1, i2));
+ va_end(ap);
+ return (_shutdown(i1, i2));
case XSYS_socket:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
i3 = va_arg(ap, int);
- return(_socket(i1, i2, i3));
+ va_end(ap);
+ return (_socket(i1, i2, i3));
case XSYS_socketpair:
i1 = va_arg(ap, int);
i2 = va_arg(ap, int);
i3 = va_arg(ap, int);
c1 = va_arg(ap, char *);
- return(_socketpair(i1, i2, i3, c1));
+ va_end(ap);
+ return (_socketpair(i1, i2, i3, c1));
/* The following can directly go through syscall */
@@ -528,8 +621,10 @@ va_dcl
case XSYS_msgsys:
case XSYS_shmsys:
case XSYS_mmap:
- case XSYS_vhangup:
- return(_syscall(syscallnum[sysnum], va_alist));
+ case XSYS_vhangup:
+ ret_val = _syscall(syscallnum[sysnum], ap);
+ va_end(ap);
+ return (ret_val);
case XSYS_aioread:
case XSYS_aiowrite:
@@ -550,7 +645,10 @@ va_dcl
case XSYS_madvise:
case XSYS_vadvise:
case XSYS_getdirentries:
+ va_end(ap);
fprintf(stderr,"system call not supported\n");
return(-1);
}
+ va_end(ap);
+ return (-1);
}