Initial import.
[vcfs.git] / utils.c
1 #define _LARGEFILE64_SOURCE
2 #define _XOPEN_SOURCE 500
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <errno.h>
6
7 #include "utils.h"
8
9 int readall(int fd, void *buf, size_t len, loff_t offset)
10 {
11     int ret;
12     
13     while(len > 0) {
14         /*
15         if(lseek(fd, offset, SEEK_SET) != offset)
16             return(-1);
17         ret = read(fd, buf, len);
18         */
19         ret = pread64(fd, buf, len, offset);
20         if(ret < 0)
21             return(-1);
22         if(ret == 0) {
23             errno = ENODATA;
24             return(-1);
25         }
26         buf += ret;
27         len -= ret;
28         offset += ret;
29     }
30     return(0);
31 }
32
33 int writeall(int fd, const void *buf, size_t len, loff_t offset)
34 {
35     int ret;
36     
37     while(len > 0) {
38         /*
39         if(lseek(fd, offset, SEEK_SET) != offset)
40             return(-1);
41         ret = write(fd, buf, len);
42         */
43         ret = pwrite64(fd, buf, len, offset);
44         if(ret < 0)
45             return(-1);
46         buf += ret;
47         len -= ret;
48         offset += ret;
49     }
50     return(0);
51 }