xref: /original-bsd/sys/stand/lseek.c (revision 5fe42eba)
1 /*-
2  * Copyright (c) 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * The Mach Operating System project at Carnegie-Mellon University.
7  *
8  * %sccs.include.redist.c%
9  *
10  *	@(#)lseek.c	8.1 (Berkeley) 06/11/93
11  *
12  *
13  * Copyright (c) 1989, 1990, 1991 Carnegie Mellon University
14  * All Rights Reserved.
15  *
16  * Author: Alessandro Forin
17  *
18  * Permission to use, copy, modify and distribute this software and its
19  * documentation is hereby granted, provided that both the copyright
20  * notice and this permission notice appear in all copies of the
21  * software, derivative works or modified versions, and any portions
22  * thereof, and that both notices appear in supporting documentation.
23  *
24  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
25  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
26  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
27  *
28  * Carnegie Mellon requests users of this software to return to
29  *
30  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
31  *  School of Computer Science
32  *  Carnegie Mellon University
33  *  Pittsburgh PA 15213-3890
34  *
35  * any improvements or extensions that they make and grant Carnegie the
36  * rights to redistribute these changes.
37  */
38 
39 #include <stand/stand.h>
40 
41 off_t
42 lseek(fd, offset, where)
43 	int fd;
44 	off_t offset;
45 	int where;
46 {
47 	register struct open_file *f = &files[fd];
48 
49 	if ((unsigned)fd >= SOPEN_MAX || f->f_flags == 0) {
50 		errno = EBADF;
51 		return (-1);
52 	}
53 
54 	/* seek is not supported on raw devices */
55 	if (f->f_flags & F_RAW)
56 		return ((off_t)-1);
57 
58 	return (f->f_ops->seek)(f, offset, where);
59 }
60