Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Mar 2017 14:36:19 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r315550 - in stable/11/sys: compat/cloudabi compat/freebsd32 compat/linux kern
Message-ID:  <201703191436.v2JEaJAQ069620@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trasz
Date: Sun Mar 19 14:36:19 2017
New Revision: 315550
URL: https://svnweb.freebsd.org/changeset/base/315550

Log:
  MFC r312987:
  
  Add kern_lseek() and use it instead of sys_lseek() in various compats.
  I didn't touch svr4/, there's no point.
  
  Sponsored by:	DARPA, AFRL

Modified:
  stable/11/sys/compat/cloudabi/cloudabi_fd.c
  stable/11/sys/compat/freebsd32/freebsd32_misc.c
  stable/11/sys/compat/linux/linux_file.c
  stable/11/sys/kern/vfs_syscalls.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/compat/cloudabi/cloudabi_fd.c
==============================================================================
--- stable/11/sys/compat/cloudabi/cloudabi_fd.c	Sun Mar 19 14:25:23 2017	(r315549)
+++ stable/11/sys/compat/cloudabi/cloudabi_fd.c	Sun Mar 19 14:36:19 2017	(r315550)
@@ -203,26 +203,23 @@ cloudabi_sys_fd_replace(struct thread *t
 int
 cloudabi_sys_fd_seek(struct thread *td, struct cloudabi_sys_fd_seek_args *uap)
 {
-	struct lseek_args lseek_args = {
-		.fd	= uap->fd,
-		.offset	= uap->offset
-	};
+	int whence;
 
 	switch (uap->whence) {
 	case CLOUDABI_WHENCE_CUR:
-		lseek_args.whence = SEEK_CUR;
+		whence = SEEK_CUR;
 		break;
 	case CLOUDABI_WHENCE_END:
-		lseek_args.whence = SEEK_END;
+		whence = SEEK_END;
 		break;
 	case CLOUDABI_WHENCE_SET:
-		lseek_args.whence = SEEK_SET;
+		whence = SEEK_SET;
 		break;
 	default:
 		return (EINVAL);
 	}
 
-	return (sys_lseek(td, &lseek_args));
+	return (kern_lseek(td, uap->fd, uap->offset, whence));
 }
 
 /* Converts a file descriptor to a CloudABI file descriptor type. */

Modified: stable/11/sys/compat/freebsd32/freebsd32_misc.c
==============================================================================
--- stable/11/sys/compat/freebsd32/freebsd32_misc.c	Sun Mar 19 14:25:23 2017	(r315549)
+++ stable/11/sys/compat/freebsd32/freebsd32_misc.c	Sun Mar 19 14:36:19 2017	(r315550)
@@ -1467,12 +1467,8 @@ freebsd32_pwrite(struct thread *td, stru
 int
 ofreebsd32_lseek(struct thread *td, struct ofreebsd32_lseek_args *uap)
 {
-	struct lseek_args nuap;
 
-	nuap.fd = uap->fd;
-	nuap.offset = uap->offset;
-	nuap.whence = uap->whence;
-	return (sys_lseek(td, &nuap));
+	return (kern_lseek(td, uap->fd, uap->offset, uap->whence));
 }
 #endif
 
@@ -1480,13 +1476,10 @@ int
 freebsd32_lseek(struct thread *td, struct freebsd32_lseek_args *uap)
 {
 	int error;
-	struct lseek_args ap;
 	off_t pos;
 
-	ap.fd = uap->fd;
-	ap.offset = PAIR32TO64(off_t,uap->offset);
-	ap.whence = uap->whence;
-	error = sys_lseek(td, &ap);
+	error = kern_lseek(td, uap->fd, PAIR32TO64(off_t, uap->offset),
+	    uap->whence);
 	/* Expand the quad return into two parts for eax and edx */
 	pos = td->td_uretoff.tdu_off;
 	td->td_retval[RETVAL_LO] = pos & 0xffffffff;	/* %eax */
@@ -1583,13 +1576,10 @@ int
 freebsd6_freebsd32_lseek(struct thread *td, struct freebsd6_freebsd32_lseek_args *uap)
 {
 	int error;
-	struct lseek_args ap;
 	off_t pos;
 
-	ap.fd = uap->fd;
-	ap.offset = PAIR32TO64(off_t,uap->offset);
-	ap.whence = uap->whence;
-	error = sys_lseek(td, &ap);
+	error = kern_lseek(td, uap->fd, PAIR32TO64(off_t, uap->offset),
+	    uap->whence);
 	/* Expand the quad return into two parts for eax and edx */
 	pos = *(off_t *)(td->td_retval);
 	td->td_retval[RETVAL_LO] = pos & 0xffffffff;	/* %eax */

Modified: stable/11/sys/compat/linux/linux_file.c
==============================================================================
--- stable/11/sys/compat/linux/linux_file.c	Sun Mar 19 14:25:23 2017	(r315549)
+++ stable/11/sys/compat/linux/linux_file.c	Sun Mar 19 14:36:19 2017	(r315550)
@@ -212,31 +212,19 @@ linux_open(struct thread *td, struct lin
 int
 linux_lseek(struct thread *td, struct linux_lseek_args *args)
 {
-	struct lseek_args /* {
-		int fd;
-		int pad;
-		off_t offset;
-		int whence;
-	} */ tmp_args;
-	int error;
 
 #ifdef DEBUG
 	if (ldebug(lseek))
 		printf(ARGS(lseek, "%d, %ld, %d"),
 		    args->fdes, (long)args->off, args->whence);
 #endif
-	tmp_args.fd = args->fdes;
-	tmp_args.offset = (off_t)args->off;
-	tmp_args.whence = args->whence;
-	error = sys_lseek(td, &tmp_args);
-	return (error);
+	return (kern_lseek(td, args->fdes, args->off, args->whence));
 }
 
 #if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32))
 int
 linux_llseek(struct thread *td, struct linux_llseek_args *args)
 {
-	struct lseek_args bsd_args;
 	int error;
 	off_t off;
 
@@ -247,14 +235,12 @@ linux_llseek(struct thread *td, struct l
 #endif
 	off = (args->olow) | (((off_t) args->ohigh) << 32);
 
-	bsd_args.fd = args->fd;
-	bsd_args.offset = off;
-	bsd_args.whence = args->whence;
-
-	if ((error = sys_lseek(td, &bsd_args)))
+	error = kern_lseek(td, args->fd, off, args->whence);
+	if (error != 0)
 		return (error);
 
-	if ((error = copyout(td->td_retval, args->res, sizeof (off_t))))
+	error = copyout(td->td_retval, args->res, sizeof(off_t));
+	if (error != 0)
 		return (error);
 
 	td->td_retval[0] = 0;

Modified: stable/11/sys/kern/vfs_syscalls.c
==============================================================================
--- stable/11/sys/kern/vfs_syscalls.c	Sun Mar 19 14:25:23 2017	(r315549)
+++ stable/11/sys/kern/vfs_syscalls.c	Sun Mar 19 14:36:19 2017	(r315550)
@@ -1804,25 +1804,25 @@ struct lseek_args {
 };
 #endif
 int
-sys_lseek(td, uap)
-	struct thread *td;
-	register struct lseek_args /* {
-		int fd;
-		int pad;
-		off_t offset;
-		int whence;
-	} */ *uap;
+sys_lseek(struct thread *td, struct lseek_args *uap)
+{
+
+	return (kern_lseek(td, uap->fd, uap->offset, uap->whence));
+}
+
+int
+kern_lseek(struct thread *td, int fd, off_t offset, int whence)
 {
 	struct file *fp;
 	cap_rights_t rights;
 	int error;
 
-	AUDIT_ARG_FD(uap->fd);
-	error = fget(td, uap->fd, cap_rights_init(&rights, CAP_SEEK), &fp);
+	AUDIT_ARG_FD(fd);
+	error = fget(td, fd, cap_rights_init(&rights, CAP_SEEK), &fp);
 	if (error != 0)
 		return (error);
 	error = (fp->f_ops->fo_flags & DFLAG_SEEKABLE) != 0 ?
-	    fo_seek(fp, uap->offset, uap->whence, td) : ESPIPE;
+	    fo_seek(fp, offset, whence, td) : ESPIPE;
 	fdrop(fp, td);
 	return (error);
 }
@@ -1839,41 +1839,20 @@ struct olseek_args {
 };
 #endif
 int
-olseek(td, uap)
-	struct thread *td;
-	register struct olseek_args /* {
-		int fd;
-		long offset;
-		int whence;
-	} */ *uap;
+olseek(struct thread *td, struct olseek_args *uap)
 {
-	struct lseek_args /* {
-		int fd;
-		int pad;
-		off_t offset;
-		int whence;
-	} */ nuap;
 
-	nuap.fd = uap->fd;
-	nuap.offset = uap->offset;
-	nuap.whence = uap->whence;
-	return (sys_lseek(td, &nuap));
+	return (kern_lseek(td, uap->fd, uap->offset, uap->whence));
 }
 #endif /* COMPAT_43 */
 
 #if defined(COMPAT_FREEBSD6)
 /* Version with the 'pad' argument */
 int
-freebsd6_lseek(td, uap)
-	struct thread *td;
-	register struct freebsd6_lseek_args *uap;
+freebsd6_lseek(struct thread *td, struct freebsd6_lseek_args *uap)
 {
-	struct lseek_args ouap;
 
-	ouap.fd = uap->fd;
-	ouap.offset = uap->offset;
-	ouap.whence = uap->whence;
-	return (sys_lseek(td, &ouap));
+	return (kern_lseek(td, uap->fd, uap->offset, uap->whence));
 }
 #endif
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201703191436.v2JEaJAQ069620>