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
11 static 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 */
30 int
__os_seek(fd,pgsize,pageno,relative,isrewind,whence)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