Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Nov 1995 12:43:37 -0800
From:      "Amancio Hasty Jr." <hasty@rah.star-gate.com>
To:        hackers@FreeBSD.ORG
Subject:   linux's lseek vs freebsd's lseek
Message-ID:  <199511122043.MAA01434@rah.star-gate.com>

next in thread | raw e-mail | index | archive | help

Howdy,

While in the process of getting Linux's music server for Doom (musserver)
working, I discovered that on linux you can issue a seek with a negative
offset.  So I changed the addition of an offset to a file position to
be a of type "int".

In vfs_syscalls.c, 
lseek(p, uap, retval)
	struct proc *p;
	register struct lseek_args *uap;
	int *retval;
{
	struct ucred *cred = p->p_ucred;
	register struct filedesc *fdp = p->p_fd;
	register struct file *fp;
	struct vattr vattr;
	int error;

	if ((u_int)uap->fd >= fdp->fd_nfiles ||
	    (fp = fdp->fd_ofiles[uap->fd]) == NULL)
		return (EBADF);
	if (fp->f_type != DTYPE_VNODE)
		return (ESPIPE);
	switch (uap->whence) {
	case L_INCR:
		(int)fp->f_offset += (int)uap->offset;
                ^^^^                 ^^^^

---------------
The question is what is the implication of doing a signed addition as 
supposed to an unsigned addition as it is in the original file.

	Tnks,
	Amancio




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