]> granicus.if.org Git - file/commitdiff
we are not supposed to modify the file pointer.
authorChristos Zoulas <christos@zoulas.com>
Mon, 15 Sep 2014 19:11:25 +0000 (19:11 +0000)
committerChristos Zoulas <christos@zoulas.com>
Mon, 15 Sep 2014 19:11:25 +0000 (19:11 +0000)
src/pread.c

index b9a448fb478f90cfe8718e0b6af745fcfe710b37..3ab52d10f70f5263e9761dd10e7f3ee7ccddeaa0 100644 (file)
@@ -1,14 +1,23 @@
 #include "file.h"
 #ifndef lint
-FILE_RCSID("@(#)$File: pread.c,v 1.1 2013/02/18 15:40:59 christos Exp $")
+FILE_RCSID("@(#)$File: pread.c,v 1.2 2013/04/02 16:23:07 christos Exp $")
 #endif  /* lint */
 #include <fcntl.h>
 #include <unistd.h>
 
 ssize_t
 pread(int fd, void *buf, size_t len, off_t off) {
-       if (lseek(fd, off, SEEK_SET) == (off_t)-1)
+       off_t old;
+       ssize_t rv;
+
+       if ((old = lseek(fd, off, SEEK_SET)) == -1)
+               return -1;
+
+       if ((rv = read(fd, buf, len)) == -1)
+               return -1;
+
+       if (lseek(fd, old, SEEK_SET) == -1)
                return -1;
 
-       return read(fd, buf, len);
+       return rv;
 }