1b6cee71dSXin LI #include "file.h"
2b6cee71dSXin LI #ifndef lint
3*898496eeSXin LI FILE_RCSID("@(#)$File: pread.c,v 1.5 2022/09/24 20:30:13 christos Exp $")
4b6cee71dSXin LI #endif /* lint */
5b6cee71dSXin LI #include <fcntl.h>
6b6cee71dSXin LI #include <unistd.h>
7b6cee71dSXin LI
8b6cee71dSXin LI ssize_t
pread(int fd,void * buf,size_t len,off_t off)9b6cee71dSXin LI pread(int fd, void *buf, size_t len, off_t off) {
10c2931133SXin LI off_t old;
11c2931133SXin LI ssize_t rv;
12c2931133SXin LI
13c2931133SXin LI if ((old = lseek(fd, off, SEEK_SET)) == -1)
14b6cee71dSXin LI return -1;
15b6cee71dSXin LI
16c2931133SXin LI if ((rv = read(fd, buf, len)) == -1)
17c2931133SXin LI return -1;
18c2931133SXin LI
19c2931133SXin LI if (lseek(fd, old, SEEK_SET) == -1)
20c2931133SXin LI return -1;
21c2931133SXin LI
22c2931133SXin LI return rv;
23b6cee71dSXin LI }
24