tdb2: tdb_foreach()
[ccan] / ccan / read_write_all / read_write_all.c
1 /* Licensed under LGPLv2+ - see LICENSE file for details */
2 #include "read_write_all.h"
3 #include <unistd.h>
4 #include <errno.h>
5
6 bool write_all(int fd, const void *data, size_t size)
7 {
8         while (size) {
9                 ssize_t done;
10
11                 done = write(fd, data, size);
12                 if (done < 0 && errno == EINTR)
13                         continue;
14                 if (done <= 0)
15                         return false;
16                 data = (const char *)data + done;
17                 size -= done;
18         }
19
20         return true;
21 }
22
23 bool read_all(int fd, void *data, size_t size)
24 {
25         while (size) {
26                 ssize_t done;
27
28                 done = read(fd, data, size);
29                 if (done < 0 && errno == EINTR)
30                         continue;
31                 if (done <= 0)
32                         return false;
33                 data = (char *)data + done;
34                 size -= done;
35         }
36
37         return true;
38 }
39