Fix a const-related compiler warning produced by the "execve" wrapper. Move network related wrappers to separate files, for SOCKS support. Fix some things so that it will compile under FreeBSD-3.0. Add missing wrappers for various system calls. Fix numerous argument declarations to agree with their prototypes. Fix the wrapper for ftruncate so that it deals properly with the 64-bit arguments. Index: m3/m3core/src/runtime/FreeBSD2/RTHeapDepC.c --- RTHeapDepC.c.orig Sat Mar 23 14:52:21 1996 +++ RTHeapDepC.c Thu Jul 10 22:41:39 1997 @@ -89,9 +89,20 @@ #include #include #include +#include #include #include +#if __FreeBSD__ >= 3 +#include +#include +#include +#include +#include +#endif + +#include + #ifdef NULL #undef NULL #endif @@ -110,22 +121,8 @@ /* Unless otherwise noted, all the following wrappers have the same structure. */ -int accept(s, addr, addrlen) /* ok */ -int s; -struct sockaddr *addr; -int *addrlen; -{ int result; - - ENTER_CRITICAL; - MAKE_WRITABLE(addr); - MAKE_WRITABLE(addrlen); - result = syscall(SYS_accept, s, addr, addrlen); - EXIT_CRITICAL; - return result; -} - int access(path, mode) /* ok */ -char *path; +const char *path; int mode; { int result; @@ -137,7 +134,7 @@ } int acct(file) /* ok */ -char *file; +const char *file; { int result; ENTER_CRITICAL; @@ -228,19 +225,6 @@ } */ -int bind(s, name, namelen) /* ok */ -int s; -const struct sockaddr *name; -int namelen; -{ int result; - - ENTER_CRITICAL; - MAKE_READABLE(name); - result = syscall(SYS_bind, s, name, namelen); - EXIT_CRITICAL; - return result; -} - /* not implemented int cachectl(addr, nbytes, op) char *addr; @@ -268,7 +252,7 @@ */ int chdir(path) /* ok */ -char *path; +const char *path; { int result; ENTER_CRITICAL; @@ -278,8 +262,20 @@ return result; } +int chflags(path, flags) +const char *path; +u_long flags; +{ int result; + + ENTER_CRITICAL; + MAKE_READABLE(path); + result = syscall(SYS_chflags, path, flags); + EXIT_CRITICAL; + return result; +} + int chmod(path, mode) /* ok */ -char *path; +const char *path; mode_t mode; { int result; @@ -291,7 +287,7 @@ } int chown(path, owner, group) /* ok */ -char *path; +const char *path; uid_t owner; gid_t group; { int result; @@ -304,7 +300,7 @@ } int chroot(dirname) /* ok */ -char *dirname; +const char *dirname; { int result; ENTER_CRITICAL; @@ -314,19 +310,6 @@ return result; } -int connect(s, name, namelen) /* ok */ -int s; -const struct sockaddr *name; -int namelen; -{ int result; - - ENTER_CRITICAL; - MAKE_READABLE(name); - result = syscall(SYS_connect, s, name, namelen); - EXIT_CRITICAL; - return result; -} - /* not implemented (obsolete) int creat(name, mode) const char *name; @@ -356,8 +339,8 @@ result = syscall(SYS_execve, name, argv, envp); if (result == -1 && errno == EFAULT) { MAKE_READABLE(name); - { char **a; for (a = argv; *a; a++) MAKE_READABLE(*a); } - { char **e; for (e = envp; *e; e++) MAKE_READABLE(*e); } + { char * const *a; for (a = argv; *a; a++) MAKE_READABLE(*a); } + { char * const *e; for (e = envp; *e; e++) MAKE_READABLE(*e); } } else { return result; } @@ -473,7 +456,7 @@ int getgroups(gidsetsize, grouplist) /* ok */ int gidsetsize; -int grouplist[]; +gid_t grouplist[]; { int result; ENTER_CRITICAL; @@ -513,20 +496,6 @@ } */ -int getpeername(s, name, namelen) /* ok */ -int s; -struct sockaddr *name; -int *namelen; -{ int result; - - ENTER_CRITICAL; - MAKE_WRITABLE(name); - MAKE_WRITABLE(namelen); - result = syscall(SYS_getpeername, s, name, namelen); - EXIT_CRITICAL; - return result; -} - int getrlimit(resource, rlp) /* ok */ int resource; struct rlimit *rlp; @@ -551,20 +520,6 @@ return result; } -int getsockname(s, name, namelen) /* ok */ -int s; -struct sockaddr *name; -int *namelen; -{ int result; - - ENTER_CRITICAL; - MAKE_WRITABLE(name); - MAKE_WRITABLE(namelen); - result = syscall(SYS_getsockname, s, name, namelen); - EXIT_CRITICAL; - return result; -} - int getsockopt(s, level, optname, optval, optlen) /* ok */ int s, level, optname; void *optval; @@ -629,9 +584,24 @@ return result; } +#ifdef SYS_lchown +int lchown(path, owner, group) /* ok */ +const char *path; +uid_t owner; +gid_t group; +{ int result; + + ENTER_CRITICAL; + MAKE_READABLE(path); + result = syscall(SYS_lchown, path, owner, group); + EXIT_CRITICAL; + return result; +} +#endif /* SYS_lchown */ + int link(name1, name2) /* ok */ -char *name1; -char *name2; +const char *name1; +const char *name2; { int result; ENTER_CRITICAL; @@ -643,7 +613,7 @@ } int lstat(path, buf) /* ok */ -char *path; +const char *path; struct stat *buf; { int result; @@ -656,7 +626,7 @@ } int mkdir(path, mode) /* ok */ -char *path; +const char *path; mode_t mode; { int result; @@ -667,8 +637,20 @@ return result; } +int mkfifo(path, mode) /* ok */ +const char *path; +mode_t mode; +{ int result; + + ENTER_CRITICAL; + MAKE_READABLE(path); + result = syscall(SYS_mkfifo, path, mode); + EXIT_CRITICAL; + return result; +} + int mknod(path, mode, dev) /* ok */ -char *path; +const char *path; mode_t mode; dev_t dev; { int result; @@ -821,21 +803,8 @@ return result; } -int read(d, buf, nbytes) /* ok */ -int d; -char *buf; -size_t nbytes; -{ int result; - - ENTER_CRITICAL; - MAKE_WRITABLE(buf); - result = syscall(SYS_read, d, buf, nbytes); - EXIT_CRITICAL; - return result; -} - int readlink(path, buf, bufsiz) /* ok */ -char *path; +const char *path; char *buf; int bufsiz; { int result; @@ -865,46 +834,6 @@ return result; } -int recv(s, buf, len, flags) /* ok */ -int s; -void *buf; -#if __FreeBSD__ >=2 -size_t len; -#else -int len; -#endif -int flags; -{ int result; - - ENTER_CRITICAL; - MAKE_WRITABLE(buf); - result = syscall(SYS_recvfrom, s, buf, len, flags, NULL, 0); - EXIT_CRITICAL; - return result; -} - -int recvfrom(s, buf, len, flags, from, fromlen) /* ok */ -int s; -void *buf; -#if __FreeBSD__ >=2 -size_t len; -#else -int len; -#endif -int flags; -struct sockaddr *from; -int *fromlen; -{ int result; - - ENTER_CRITICAL; - MAKE_WRITABLE(buf); - MAKE_WRITABLE(from); - MAKE_WRITABLE(fromlen); - result = syscall(SYS_recvfrom, s, buf, len, flags, from, fromlen); - EXIT_CRITICAL; - return result; -} - int recvmsg(s, msg, flags) /* ok */ int s; struct msghdr msg[]; @@ -940,7 +869,7 @@ } int rmdir(path) /* ok */ -char *path; +const char *path; { int result; ENTER_CRITICAL; @@ -950,24 +879,6 @@ return result; } -int select(nfds, readfds, writefds, exceptfds, timeout) /* ok */ -int nfds; -fd_set *readfds; -fd_set *writefds; -fd_set *exceptfds; -struct timeval *timeout; -{ int result; - - ENTER_CRITICAL; - MAKE_WRITABLE(readfds); - MAKE_WRITABLE(writefds); - MAKE_WRITABLE(exceptfds); - MAKE_READABLE(timeout); - result = syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout); - EXIT_CRITICAL; - return result; -} - int semctl(semid, semnum, cmd, arg) /* ok ? */ int semid, cmd; int semnum; @@ -1012,24 +923,6 @@ return result; } -int send(s, msg, len, flags) /* ok */ -int s; -const void *msg; -#if __FreeBSD__ >=2 -size_t len; -#else -int len; -#endif -int flags; -{ int result; - - ENTER_CRITICAL; - MAKE_READABLE(msg); - result = syscall(SYS_sendto, s, msg, len, flags, NULL, 0); - EXIT_CRITICAL; - return result; -} - int sendmsg(s, msg, flags) /* ok */ int s; const struct msghdr msg[]; @@ -1051,29 +944,8 @@ return result; } -int sendto(s, msg, len, flags, to, tolen) /* ok */ -int s; -const void *msg; -#if __FreeBSD__ >=2 -size_t len; -#else -int len; -#endif -int flags; -const struct sockaddr *to; -int tolen; -{ int result; - - ENTER_CRITICAL; - MAKE_READABLE(msg); - MAKE_READABLE(to); - result = syscall(SYS_sendto, s, msg, len, flags, to, tolen); - EXIT_CRITICAL; - return result; -} - int setdomainname(name, namelen) /* ok */ -char *name; +const char *name; int namelen; { int result; @@ -1086,7 +958,7 @@ int setgroups(ngroups, gidset) /* ok */ int ngroups; -int *gidset; +const gid_t *gidset; { int result; ENTER_CRITICAL; @@ -1097,7 +969,7 @@ } int sethostname(name, namelen) /* ok */ -char *name; +const char *name; int namelen; { int result; #if __FreeBSD__ >= 2 @@ -1213,20 +1085,20 @@ return result; } -/* not implemented -int sigpending(set) -sigset_t *set; +int sigaction(sig, act, oact) +int sig; +const struct sigaction *act; +struct sigaction *oact; { int result; ENTER_CRITICAL; - MAKE_WRITABLE(set); - result = syscall(SYS_sigpending, set); + MAKE_READABLE(act); + MAKE_WRITABLE(oact); + result = syscall(SYS_sigaction, sig, act, oact); EXIT_CRITICAL; return result; } -*/ -#if __FreeBSD__ >= 2 int sigaltstack(ss, oss) /* ok */ const struct sigaltstack *ss; struct sigaltstack *oss; @@ -1239,20 +1111,6 @@ EXIT_CRITICAL; return result; } -#else -int sigstack(ss, oss) /* ok */ -const struct sigstack *ss; -struct sigstack *oss; -{ int result; - - ENTER_CRITICAL; - MAKE_READABLE(ss); - MAKE_WRITABLE(oss); - result = syscall(SYS_sigstack, ss, oss); - EXIT_CRITICAL; - return result; -} -#endif int socketpair(d, type, protocol, sv) /* ok */ int d, type, protocol; @@ -1267,7 +1125,7 @@ } int stat(path, buf) /* ok */ -char *path; +const char *path; struct stat *buf; { int result; @@ -1280,7 +1138,7 @@ } int swapon(special) /* ok */ -char *special; +const char *special; { int result; ENTER_CRITICAL; @@ -1291,8 +1149,8 @@ } int symlink(name1, name2) /* ok */ -char *name1; -char *name2; +const char *name1; +const char *name2; { int result; ENTER_CRITICAL; @@ -1304,14 +1162,14 @@ } int truncate(path, length) /* ok */ -char *path; -long length; +const char *path; +off_t length; { int result; - off_t len = (off_t)length; ENTER_CRITICAL; MAKE_READABLE(path); - result = syscall(SYS_truncate, path, len); + /* The casts below pad "path" out to a 64-bit value as required. */ + result = __syscall(SYS_truncate, (u_quad_t) (u_int) path, length); EXIT_CRITICAL; return result; } @@ -1328,7 +1186,7 @@ } int unlink(path) /* ok */ -char *path; +const char *path; { int result; ENTER_CRITICAL; @@ -1414,19 +1272,6 @@ ENTER_CRITICAL; MAKE_WRITABLE(status); result = syscall(SYS_wait4, pid, status, options, NULL); - EXIT_CRITICAL; - return result; -} - -int write(fd, buf, nbytes) /* ok */ -int fd; -char *buf; -int nbytes; -{ int result; - - ENTER_CRITICAL; - MAKE_READABLE(buf); - result = syscall(SYS_write, fd, buf, nbytes); EXIT_CRITICAL; return result; }