Date: Mon, 7 Feb 2005 22:32:22 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 70564 for review Message-ID: <200502072232.j17MWM7d048276@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=70564 Change 70564 by jhb@jhb_slimer on 2005/02/07 22:31:33 IFC @70562 (more loopback). Affected files ... .. //depot/projects/smpng/sys/compat/svr4/svr4_fcntl.c#19 integrate .. //depot/projects/smpng/sys/compat/svr4/svr4_ipc.c#6 integrate .. //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#39 integrate .. //depot/projects/smpng/sys/compat/svr4/svr4_stat.c#14 integrate .. //depot/projects/smpng/sys/compat/svr4/svr4_stream.c#22 integrate .. //depot/projects/smpng/sys/compat/svr4/svr4_sysvec.c#19 integrate .. //depot/projects/smpng/sys/compat/svr4/svr4_util.h#6 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_fcntl.c#12 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_misc.c#19 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_msg.c#5 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_other.c#7 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_stat.c#13 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_util.c#9 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_util.h#7 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_xenix.c#11 integrate .. //depot/projects/smpng/sys/kern/kern_time.c#33 integrate .. //depot/projects/smpng/sys/kern/vfs_syscalls.c#84 integrate .. //depot/projects/smpng/sys/sys/syscallsubr.h#17 integrate Differences ... ==== //depot/projects/smpng/sys/compat/svr4/svr4_fcntl.c#19 (text+ko) ==== @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_fcntl.c,v 1.34 2005/01/05 22:34:36 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_fcntl.c,v 1.35 2005/02/07 21:53:41 jhb Exp $"); #include "opt_mac.h" @@ -41,6 +41,7 @@ /*#include <sys/ioctl.h>*/ #include <sys/lock.h> #include <sys/mac.h> +#include <sys/malloc.h> #include <sys/mount.h> #include <sys/mutex.h> #include <sys/namei.h> @@ -366,16 +367,14 @@ struct svr4_sys_open_args *uap; { struct proc *p = td->td_proc; - int error, retval; - struct open_args cup; + char *newpath; + int bsd_flags, error, retval; - caddr_t sg = stackgap_init(); - CHECKALTEXIST(td, &sg, uap->path); + CHECKALTEXIST(td, uap->path, &newpath); - (&cup)->path = uap->path; - (&cup)->flags = svr4_to_bsd_flags(uap->flags); - (&cup)->mode = uap->mode; - error = open(td, &cup); + bsd_flags = svr4_to_bsd_flags(uap->flags); + error = kern_open(td, newpath, UIO_SYSSPACE, bsd_flags, uap->mode); + free(newpath, M_TEMP); if (error) { /* uprintf("svr4_open(%s, 0x%0x, 0%o): %d\n", uap->path, @@ -386,8 +385,8 @@ retval = td->td_retval[0]; PROC_LOCK(p); - if (!(cup.flags & O_NOCTTY) && SESS_LEADER(p) && - !(td->td_proc->p_flag & P_CONTROLT)) { + if (!(bsd_flags & O_NOCTTY) && SESS_LEADER(p) && + !(p->p_flag & P_CONTROLT)) { #if defined(NOTYET) struct file *fp; @@ -427,16 +426,15 @@ register struct thread *td; struct svr4_sys_creat_args *uap; { - struct open_args cup; + char *newpath; + int error; - caddr_t sg = stackgap_init(); - CHECKALTEXIST(td, &sg, uap->path); + CHECKALTEXIST(td, uap->path, &newpath); - cup.path = uap->path; - cup.mode = uap->mode; - cup.flags = O_WRONLY | O_CREAT | O_TRUNC; - - return open(td, &cup); + error = kern_open(td, newpath, UIO_SYSSPACE, O_WRONLY | O_CREAT | + O_TRUNC, uap->mode); + free(newpath, M_TEMP); + return (error); } int @@ -473,18 +471,13 @@ register struct thread *td; struct svr4_sys_access_args *uap; { - struct access_args cup; - int *retval; + char *newpath; + int error; - caddr_t sg = stackgap_init(); - CHECKALTEXIST(td, &sg, uap->path); - - retval = td->td_retval; - - cup.path = uap->path; - cup.flags = uap->flags; - - return access(td, &cup); + CHECKALTEXIST(td, uap->path, &newpath); + error = kern_access(td, newpath, UIO_SYSSPACE, uap->flags); + free(newpath, M_TEMP); + return (error); } #if defined(NOTYET) ==== //depot/projects/smpng/sys/compat/svr4/svr4_ipc.c#6 (text+ko) ==== @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_ipc.c,v 1.14 2005/01/05 22:34:36 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_ipc.c,v 1.15 2005/02/07 21:53:41 jhb Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -527,49 +527,32 @@ void *v; register_t *retval; { - int error; struct svr4_sys_msgctl_args *uap = v; - struct sys_msgctl_args ap; struct svr4_msqid_ds ss; struct msqid_ds bs; - caddr_t sg = stackgap_init(); - - ap.msqid = uap->msqid; - ap.cmd = uap->cmd; - ap.buf = stackgap_alloc(&sg, sizeof(bs)); + int error; switch (uap->cmd) { case SVR4_IPC_STAT: - ap.cmd = IPC_STAT; - if ((error = sys_msgctl(p, &ap, retval)) != 0) - return error; - error = copyin(&bs, ap.buf, sizeof bs); + error = kern_msgctl(td, uap->msqid, IPC_STAT, &bs); if (error) return error; bsd_to_svr4_msqid_ds(&bs, &ss); return copyout(&ss, uap->buf, sizeof ss); case SVR4_IPC_SET: - ap.cmd = IPC_SET; error = copyin(uap->buf, &ss, sizeof ss); if (error) return error; svr4_to_bsd_msqid_ds(&ss, &bs); - error = copyout(&bs, ap.buf, sizeof bs); - if (error) - return error; - return sys_msgctl(p, &ap, retval); + return (kern_msgctl(td, uap->msqid, IPC_SET, &bs)); case SVR4_IPC_RMID: - ap.cmd = IPC_RMID; error = copyin(uap->buf, &ss, sizeof ss); if (error) return error; svr4_to_bsd_msqid_ds(&ss, &bs); - error = copyout(&bs, ap.buf, sizeof bs); - if (error) - return error; - return sys_msgctl(p, &ap, retval); + return (kern_msgctl(td, uap->msqid, IPC_RMID, &bs)); default: return EINVAL; ==== //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#39 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_misc.c,v 1.78 2005/01/05 22:34:36 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_misc.c,v 1.79 2005/02/07 21:53:41 jhb Exp $"); #include "opt_mac.h" @@ -42,6 +42,7 @@ #include <sys/dirent.h> #include <sys/fcntl.h> #include <sys/filedesc.h> +#include <sys/imgact.h> #include <sys/kernel.h> #include <sys/lock.h> #include <sys/mac.h> @@ -164,17 +165,18 @@ struct thread *td; struct svr4_sys_execv_args *uap; { - struct execve_args ap; - caddr_t sg; + struct image_args eargs; + char *path; + int error; - sg = stackgap_init(); - CHECKALTEXIST(td, &sg, uap->path); + CHECKALTEXIST(td, uap->path, &path); - ap.fname = uap->path; - ap.argv = uap->argp; - ap.envv = NULL; - - return execve(td, &ap); + error = exec_copyin_args(&eargs, path, UIO_SYSSPACE, uap->argp, NULL); + free(path, M_TEMP); + if (error == 0) + error = kern_execve(td, &eargs, NULL); + exec_free_args(&eargs); + return (error); } int @@ -182,17 +184,19 @@ struct thread *td; struct svr4_sys_execve_args *uap; { - struct execve_args ap; - caddr_t sg; + struct image_args eargs; + char *path; + int error; - sg = stackgap_init(); - CHECKALTEXIST(td, &sg, uap->path); + CHECKALTEXIST(td, uap->path, &path); - ap.fname = uap->path; - ap.argv = uap->argp; - ap.envv = uap->envp; - - return execve(td, &ap); + error = exec_copyin_args(&eargs, path, UIO_SYSSPACE, uap->argp, + uap->envp); + free(path, M_TEMP); + if (error == 0) + error = kern_execve(td, &eargs, NULL); + exec_free_args(&eargs); + return (error); } int @@ -638,22 +642,17 @@ svr4_mode_t mode; svr4_dev_t dev; { - caddr_t sg = stackgap_init(); + char *newpath; + int error; - CHECKALTEXIST(td, &sg, path); + CHECKALTEXIST(td, path, &newpath); - if (S_ISFIFO(mode)) { - struct mkfifo_args ap; - ap.path = path; - ap.mode = mode; - return mkfifo(td, &ap); - } else { - struct mknod_args ap; - ap.path = path; - ap.mode = mode; - ap.dev = dev; - return mknod(td, &ap); - } + if (S_ISFIFO(mode)) + error = kern_mkfifo(td, newpath, UIO_SYSSPACE, mode); + else + error = kern_mknod(td, newpath, UIO_SYSSPACE, mode, dev); + free(newpath, M_TEMP); + return (error); } @@ -1433,25 +1432,18 @@ struct thread *td; struct svr4_sys_statvfs_args *uap; { - struct statfs_args fs_args; - caddr_t sg = stackgap_init(); - struct statfs *fs = stackgap_alloc(&sg, sizeof(struct statfs)); + struct svr4_statvfs sfs; struct statfs bfs; - struct svr4_statvfs sfs; + char *path; int error; - CHECKALTEXIST(td, &sg, uap->path); - fs_args.path = uap->path; - fs_args.buf = fs; + CHECKALTEXIST(td, uap->path, &path); - if ((error = statfs(td, &fs_args)) != 0) - return error; - - if ((error = copyin(fs, &bfs, sizeof(bfs))) != 0) - return error; - + error = kern_statfs(td, path, UIO_SYSSPACE, &bfs); + free(path, M_TEMP); + if (error) + return (error); bsd_statfs_to_svr4_statvfs(&bfs, &sfs); - return copyout(&sfs, uap->fs, sizeof(sfs)); } @@ -1461,24 +1453,14 @@ struct thread *td; struct svr4_sys_fstatvfs_args *uap; { - struct fstatfs_args fs_args; - caddr_t sg = stackgap_init(); - struct statfs *fs = stackgap_alloc(&sg, sizeof(struct statfs)); + struct svr4_statvfs sfs; struct statfs bfs; - struct svr4_statvfs sfs; int error; - fs_args.fd = uap->fd; - fs_args.buf = fs; - - if ((error = fstatfs(td, &fs_args)) != 0) - return error; - - if ((error = copyin(fs, &bfs, sizeof(bfs))) != 0) - return error; - + error = kern_fstatfs(td, uap->fd, &bfs); + if (error) + return (error); bsd_statfs_to_svr4_statvfs(&bfs, &sfs); - return copyout(&sfs, uap->fs, sizeof(sfs)); } @@ -1488,25 +1470,18 @@ struct thread *td; struct svr4_sys_statvfs64_args *uap; { - struct statfs_args fs_args; - caddr_t sg = stackgap_init(); - struct statfs *fs = stackgap_alloc(&sg, sizeof(struct statfs)); + struct svr4_statvfs64 sfs; struct statfs bfs; - struct svr4_statvfs64 sfs; + char *path; int error; - CHECKALTEXIST(td, &sg, uap->path); - fs_args.path = uap->path; - fs_args.buf = fs; + CHECKALTEXIST(td, uap->path, &path); - if ((error = statfs(td, &fs_args)) != 0) - return error; - - if ((error = copyin(fs, &bfs, sizeof(bfs))) != 0) - return error; - + error = kern_statfs(td, path, UIO_SYSSPACE, &bfs); + free(path, M_TEMP); + if (error) + return (error); bsd_statfs_to_svr4_statvfs64(&bfs, &sfs); - return copyout(&sfs, uap->fs, sizeof(sfs)); } @@ -1516,24 +1491,14 @@ struct thread *td; struct svr4_sys_fstatvfs64_args *uap; { - struct fstatfs_args fs_args; - caddr_t sg = stackgap_init(); - struct statfs *fs = stackgap_alloc(&sg, sizeof(struct statfs)); + struct svr4_statvfs64 sfs; struct statfs bfs; - struct svr4_statvfs64 sfs; int error; - fs_args.fd = uap->fd; - fs_args.buf = fs; - - if ((error = fstatfs(td, &fs_args)) != 0) - return error; - - if ((error = copyin(fs, &bfs, sizeof(bfs))) != 0) - return error; - + error = kern_fstatfs(td, uap->fd, &bfs); + if (error) + return (error); bsd_statfs_to_svr4_statvfs64(&bfs, &sfs); - return copyout(&sfs, uap->fs, sizeof(sfs)); } @@ -1542,28 +1507,19 @@ struct thread *td; struct svr4_sys_alarm_args *uap; { + struct itimerval itv, oitv; int error; - struct itimerval *itp, *oitp; - struct setitimer_args sa; - caddr_t sg = stackgap_init(); - itp = stackgap_alloc(&sg, sizeof(*itp)); - oitp = stackgap_alloc(&sg, sizeof(*oitp)); - timevalclear(&itp->it_interval); - itp->it_value.tv_sec = uap->sec; - itp->it_value.tv_usec = 0; - - sa.which = ITIMER_REAL; - sa.itv = itp; - sa.oitv = oitp; - error = setitimer(td, &sa); + timevalclear(&itv.it_interval); + itv.it_value.tv_sec = uap->sec; + itv.it_value.tv_usec = 0; + error = kern_setitimer(td, ITIMER_REAL, &itv, &oitv); if (error) - return error; - if (oitp->it_value.tv_usec) - oitp->it_value.tv_sec++; - td->td_retval[0] = oitp->it_value.tv_sec; - return 0; - + return (error); + if (oitv.it_value.tv_usec != 0) + oitv.it_value.tv_sec++; + td->td_retval[0] = oitv.it_value.tv_sec; + return (0); } int ==== //depot/projects/smpng/sys/compat/svr4/svr4_stat.c#14 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_stat.c,v 1.19 2005/01/05 22:34:36 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_stat.c,v 1.20 2005/02/07 21:53:42 jhb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -36,8 +36,10 @@ #include <sys/filedesc.h> #include <sys/jail.h> #include <sys/kernel.h> +#include <sys/malloc.h> #include <sys/unistd.h> #include <sys/time.h> +#include <sys/syscallsubr.h> #include <sys/sysctl.h> #include <sys/sysproto.h> #include <sys/un.h> @@ -160,33 +162,23 @@ struct thread *td; struct svr4_sys_stat_args *uap; { - struct stat st; - struct svr4_stat svr4_st; - struct stat_args cup; - int error; - caddr_t sg = stackgap_init(); + struct svr4_stat svr4_st; + struct stat st; + char *path; + int error; - CHECKALTEXIST(td, &sg, uap->path); + CHECKALTEXIST(td, uap->path, &path); - cup.path = uap->path; - cup.ub = stackgap_alloc(&sg, sizeof(struct stat)); - - - if ((error = stat(td, &cup)) != 0) - return error; - - if ((error = copyin(cup.ub, &st, sizeof st)) != 0) - return error; - + error = kern_stat(td, path, UIO_SYSSPACE, &st); + free(path, M_TEMP); + if (error) + return (error); bsd_to_svr4_stat(&st, &svr4_st); if (S_ISSOCK(st.st_mode)) (void) svr4_add_socket(td, uap->path, &st); - if ((error = copyout(&svr4_st, uap->ub, sizeof svr4_st)) != 0) - return error; - - return 0; + return (copyout(&svr4_st, uap->ub, sizeof svr4_st)); } @@ -195,32 +187,23 @@ register struct thread *td; struct svr4_sys_lstat_args *uap; { - struct stat st; - struct svr4_stat svr4_st; - struct lstat_args cup; - int error; - caddr_t sg = stackgap_init(); + struct svr4_stat svr4_st; + struct stat st; + char *path; + int error; - CHECKALTEXIST(td, &sg, uap->path); + CHECKALTEXIST(td, uap->path, &path); - cup.path = uap->path; - cup.ub = stackgap_alloc(&sg, sizeof(struct stat)); - - if ((error = lstat(td, &cup)) != 0) - return error; - - if ((error = copyin(cup.ub, &st, sizeof st)) != 0) - return error; - + error = kern_lstat(td, path, UIO_SYSSPACE, &st); + free(path, M_TEMP); + if (error) + return (error); bsd_to_svr4_stat(&st, &svr4_st); if (S_ISSOCK(st.st_mode)) (void) svr4_add_socket(td, uap->path, &st); - if ((error = copyout(&svr4_st, uap->ub, sizeof svr4_st)) != 0) - return error; - - return 0; + return (copyout(&svr4_st, uap->ub, sizeof svr4_st)); } @@ -229,27 +212,16 @@ register struct thread *td; struct svr4_sys_fstat_args *uap; { - struct stat st; - struct svr4_stat svr4_st; - struct fstat_args cup; - int error; - caddr_t sg = stackgap_init(); + struct svr4_stat svr4_st; + struct stat st; + int error; - cup.fd = uap->fd; - cup.sb = stackgap_alloc(&sg, sizeof(struct stat)); - if ((error = fstat(td, &cup)) != 0) - return error; - - if ((error = copyin(cup.sb, &st, sizeof st)) != 0) - return error; - + error = kern_fstat(td, uap->fd, &st); + if (error) + return (error); bsd_to_svr4_stat(&st, &svr4_st); - - if ((error = copyout(&svr4_st, uap->sb, sizeof svr4_st)) != 0) - return error; - - return 0; + return (copyout(&svr4_st, uap->sb, sizeof svr4_st)); } @@ -258,22 +230,17 @@ register struct thread *td; struct svr4_sys_xstat_args *uap; { - struct stat st; - struct svr4_xstat svr4_st; - struct stat_args cup; - int error; + struct svr4_xstat svr4_st; + struct stat st; + char *path; + int error; - caddr_t sg = stackgap_init(); - CHECKALTEXIST(td, &sg, uap->path); + CHECKALTEXIST(td, uap->path, &path); - cup.path = uap->path; - cup.ub = stackgap_alloc(&sg, sizeof(struct stat)); - - if ((error = stat(td, &cup)) != 0) - return error; - - if ((error = copyin(cup.ub, &st, sizeof st)) != 0) - return error; + error = kern_stat(td, path, UIO_SYSSPACE, &st); + free(path, M_TEMP); + if (error) + return (error); bsd_to_svr4_xstat(&st, &svr4_st); @@ -282,10 +249,7 @@ (void) svr4_add_socket(td, uap->path, &st); #endif - if ((error = copyout(&svr4_st, uap->ub, sizeof svr4_st)) != 0) - return error; - - return 0; + return (copyout(&svr4_st, uap->ub, sizeof svr4_st)); } int @@ -293,32 +257,25 @@ register struct thread *td; struct svr4_sys_lxstat_args *uap; { - struct stat st; - struct svr4_xstat svr4_st; - struct lstat_args cup; - int error; - caddr_t sg = stackgap_init(); - CHECKALTEXIST(td, &sg, uap->path); + struct svr4_xstat svr4_st; + struct stat st; + char *path; + int error; - cup.path = uap->path; - cup.ub = stackgap_alloc(&sg, sizeof(struct stat)); + CHECKALTEXIST(td, uap->path, &path); - if ((error = lstat(td, &cup)) != 0) - return error; + error = kern_lstat(td, path, UIO_SYSSPACE, &st); + free(path, M_TEMP); + if (error) + return (error); - if ((error = copyin(cup.ub, &st, sizeof st)) != 0) - return error; - bsd_to_svr4_xstat(&st, &svr4_st); #if defined(SOCKET_NOTYET) if (S_ISSOCK(st.st_mode)) (void) svr4_add_socket(td, uap->path, &st); #endif - if ((error = copyout(&svr4_st, uap->ub, sizeof svr4_st)) != 0) - return error; - - return 0; + return (copyout(&svr4_st, uap->ub, sizeof svr4_st)); } @@ -327,28 +284,16 @@ register struct thread *td; struct svr4_sys_fxstat_args *uap; { - struct stat st; - struct svr4_xstat svr4_st; - struct fstat_args cup; - int error; + struct svr4_xstat svr4_st; + struct stat st; + int error; - caddr_t sg = stackgap_init(); - cup.fd = uap->fd; - cup.sb = stackgap_alloc(&sg, sizeof(struct stat)); - - if ((error = fstat(td, &cup)) != 0) - return error; - - if ((error = copyin(cup.sb, &st, sizeof st)) != 0) - return error; - + error = kern_fstat(td, uap->fd, &st); + if (error) + return (error); bsd_to_svr4_xstat(&st, &svr4_st); - - if ((error = copyout(&svr4_st, uap->sb, sizeof svr4_st)) != 0) - return error; - - return 0; + return (copyout(&svr4_st, uap->sb, sizeof svr4_st)); } int @@ -356,32 +301,24 @@ register struct thread *td; struct svr4_sys_stat64_args *uap; { - struct stat st; - struct svr4_stat64 svr4_st; - struct stat_args cup; - int error; - caddr_t sg = stackgap_init(); + struct svr4_stat64 svr4_st; + struct stat st; + char *path; + int error; - CHECKALTEXIST(td, &sg, uap->path); + CHECKALTEXIST(td, uap->path, &path); - cup.path = uap->path; - cup.ub = stackgap_alloc(&sg, sizeof(struct stat)); - - if ((error = stat(td, &cup)) != 0) - return error; + error = kern_stat(td, path, UIO_SYSSPACE, &st); + free(path, M_TEMP); + if (error) + return (error); - if ((error = copyin(cup.ub, &st, sizeof st)) != 0) - return error; - bsd_to_svr4_stat64(&st, &svr4_st); if (S_ISSOCK(st.st_mode)) (void) svr4_add_socket(td, uap->path, &st); - if ((error = copyout(&svr4_st, uap->sb, sizeof svr4_st)) != 0) - return error; - - return 0; + return (copyout(&svr4_st, uap->sb, sizeof svr4_st)); } @@ -390,32 +327,24 @@ register struct thread *td; struct svr4_sys_lstat64_args *uap; { - struct stat st; - struct svr4_stat64 svr4_st; - struct stat_args cup; - int error; - caddr_t sg = stackgap_init(); + struct svr4_stat64 svr4_st; + struct stat st; + char *path; + int error; - CHECKALTEXIST(td, &sg, (char *) uap->path); + CHECKALTEXIST(td, uap->path, &path); - cup.path = uap->path; - cup.ub = stackgap_alloc(&sg, sizeof(struct stat)); + error = kern_lstat(td, path, UIO_SYSSPACE, &st); + free(path, M_TEMP); + if (error) + return (error); - if ((error = lstat(td, (struct lstat_args *)&cup)) != 0) - return error; - - if ((error = copyin(cup.ub, &st, sizeof st)) != 0) - return error; - bsd_to_svr4_stat64(&st, &svr4_st); if (S_ISSOCK(st.st_mode)) (void) svr4_add_socket(td, uap->path, &st); - if ((error = copyout(&svr4_st, uap->sb, sizeof svr4_st)) != 0) - return error; - - return 0; + return (copyout(&svr4_st, uap->sb, sizeof svr4_st)); } @@ -424,27 +353,15 @@ register struct thread *td; struct svr4_sys_fstat64_args *uap; { - struct stat st; - struct svr4_stat64 svr4_st; - struct fstat_args cup; - int error; - caddr_t sg = stackgap_init(); + struct svr4_stat64 svr4_st; + struct stat st; + int error; - cup.fd = uap->fd; - cup.sb = stackgap_alloc(&sg, sizeof(struct stat)); - - if ((error = fstat(td, &cup)) != 0) - return error; - - if ((error = copyin(cup.sb, &st, sizeof st)) != 0) - return error; - + error = kern_fstat(td, uap->fd, &st); + if (error) + return (error); bsd_to_svr4_stat64(&st, &svr4_st); - - if ((error = copyout(&svr4_st, uap->sb, sizeof svr4_st)) != 0) - return error; - - return 0; + return (copyout(&svr4_st, uap->sb, sizeof svr4_st)); } @@ -636,30 +553,26 @@ struct svr4_sys_utime_args *uap; { struct svr4_utimbuf ub; - struct timeval tbuf[2]; - struct utimes_args ap; + struct timeval tbuf[2], *tp; + char *path; int error; - caddr_t sg = stackgap_init(); - void *ttp; - - CHECKALTEXIST(td, &sg, uap->path); - ap.path = uap->path; + if (uap->ubuf != NULL) { - if ((error = copyin(uap->ubuf, &ub, sizeof(ub))) != 0) - return error; + error = copyin(uap->ubuf, &ub, sizeof(ub)); + if (error) + return (error); tbuf[0].tv_sec = ub.actime; tbuf[0].tv_usec = 0; tbuf[1].tv_sec = ub.modtime; tbuf[1].tv_usec = 0; - ttp = stackgap_alloc(&sg, sizeof(tbuf)); - error = copyout(tbuf, ttp, sizeof(tbuf)); - if (error) - return error; - ap.tptr = ttp; - } - else - ap.tptr = NULL; - return utimes(td, &ap); + tp = tbuf; + } else + tp = NULL; + + CHECKALTEXIST(td, uap->path, &path); + error = kern_utimes(td, path, UIO_SYSSPACE, tp, UIO_SYSSPACE); + free(path, M_TEMP); + return (error); } @@ -668,9 +581,13 @@ register struct thread *td; struct svr4_sys_utimes_args *uap; { - caddr_t sg = stackgap_init(); - CHECKALTEXIST(td, &sg, uap->path); - return utimes(td, (struct utimes_args *)uap); + char *path; + int error; + + CHECKALTEXIST(td, uap->path, &path); + error = kern_utimes(td, path, UIO_SYSSPACE, uap->tptr, UIO_USERSPACE); + free(path, M_TEMP); + return (error); } static int @@ -727,22 +644,23 @@ register struct thread *td; struct svr4_sys_pathconf_args *uap; { - caddr_t sg = stackgap_init(); - register_t *retval = td->td_retval; + char *path; + int error, name; - CHECKALTEXIST(td, &sg, uap->path); + name = svr4_to_bsd_pathconf(uap->name); - uap->name = svr4_to_bsd_pathconf(uap->name); - - switch (uap->name) { + switch (name) { case -1: - *retval = -1; - return EINVAL; + td->td_retval[0] = -1; + return (EINVAL); case 0: - *retval = 0; - return 0; + td->td_retval[0] = 0; + return (0); default: - return pathconf(td, (struct pathconf_args *)uap); + CHECKALTEXIST(td, uap->path, &path); + error = kern_pathconf(td, path, UIO_SYSSPACE, name); + free(path, M_TEMP); + return (error); } } ==== //depot/projects/smpng/sys/compat/svr4/svr4_stream.c#22 (text+ko) ==== @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_stream.c,v 1.51 2005/01/05 22:34:37 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_stream.c,v 1.52 2005/02/07 21:53:42 jhb Exp $"); #define COMPAT_43 1 @@ -80,7 +80,7 @@ #include <compat/svr4/svr4_socket.h> /* Utils */ -static int clean_pipe(struct thread *, const char *); +static int clean_pipe(struct thread *, char *); static void getparm(struct file *, struct svr4_si_sockparms *); static int svr4_do_putmsg(struct thread *, struct svr4_sys_putmsg_args *, struct file *); @@ -509,48 +509,26 @@ static int clean_pipe(td, path) struct thread *td; - const char *path; + char *path; { - struct lstat_args la; - struct unlink_args ua; struct stat st; int error; - caddr_t sg = stackgap_init(); - size_t l = strlen(path) + 1; - void *tpath; - if ((tpath = stackgap_alloc(&sg, l)) == NULL) - return ENAMETOOLONG; - la.ub = stackgap_alloc(&sg, sizeof(struct stat)); - - if ((error = copyout(path, tpath, l)) != 0) - return error; - - la.path = tpath; + error = kern_lstat(td, path, UIO_SYSSPACE, &st); - if ((error = lstat(td, &la)) != 0) >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200502072232.j17MWM7d048276>