tfile.c - spoon - [fork] customized build of spoon, the dwm status utility
(HTM) git clone git://src.adamsgaard.dk/spoon
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
tfile.c (604B)
---
1 #include <err.h>
2 #include <fcntl.h>
3 #include <unistd.h>
4
5 ssize_t
6 readn(int fd, void *buf, size_t nbytes)
7 {
8 size_t nleft = nbytes;
9 ssize_t n;
10
11 do {
12 n = read(fd, buf, nleft);
13 if (n == 0)
14 break;
15 else if (n == -1)
16 return -1;
17 nleft -= n;
18 buf += n;
19 } while (nleft > 0);
20 return (nbytes - nleft);
21 }
22
23 int
24 fileread(void *arg, char *buf, size_t len)
25 {
26 char *path = arg;
27 ssize_t n;
28 int fd;
29
30 fd = open(path, O_RDONLY);
31 if (fd == -1) {
32 warn("open %s", path);
33 return -1;
34 }
35 n = readn(fd, buf, len);
36 close(fd);
37 if (n == -1 || n == 0)
38 return -1;
39 else
40 buf[n - 1] = '\0';
41 return 0;
42 }