1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 1997, 1998
5 *	Sleepycat Software.  All rights reserved.
6 */
7
8#include "config.h"
9
10#ifndef lint
11static const char sccsid[] = "@(#)os_seek.c	10.11 (Sleepycat) 10/12/98";
12#endif /* not lint */
13
14#ifndef NO_SYSTEM_INCLUDES
15#include <sys/types.h>
16
17#include <errno.h>
18#include <unistd.h>
19#endif
20
21#include "db_int.h"
22#include "os_jump.h"
23
24/*
25 * __os_seek --
26 *	Seek to a page/byte offset in the file.
27 *
28 * PUBLIC: int __os_seek __P((int, size_t, db_pgno_t, u_int32_t, int, int));
29 */
30int
31__os_seek(fd, pgsize, pageno, relative, isrewind, whence)
32	int fd;
33	size_t pgsize;
34	db_pgno_t pageno;
35	u_int32_t relative;
36	int isrewind, whence;
37{
38	off_t offset;
39	int ret;
40
41	if (__db_jump.j_seek != NULL)
42		ret = __db_jump.j_seek(fd,
43		    pgsize, pageno, relative, isrewind, whence);
44	else {
45		offset = (off_t)pgsize * pageno + relative;
46		if (isrewind)
47			offset = -offset;
48
49		ret = lseek(fd, offset, whence);
50	}
51	return (ret == -1 ? errno : 0);
52}
53