io.h - blind - suckless command-line video editing utility
(HTM) git clone git://git.suckless.org/blind
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
io.h (2028B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <fcntl.h>
3 #include <errno.h>
4
5 #if defined(POSIX_FADV_SEQUENTIAL)
6 # define fadvise_sequential(...) posix_fadvise(__VA_ARGS__, POSIX_FADV_SEQUENTIAL)
7 #else
8 # define fadvise_sequential(...)
9 #endif
10
11 #if defined(POSIX_FADV_RANDOM)
12 # define fadvise_random(...) posix_fadvise(__VA_ARGS__, POSIX_FADV_RANDOM)
13 #else
14 # define fadvise_random(...)
15 #endif
16
17 #define ewriteall(...) enwriteall(1, __VA_ARGS__)
18 #define ereadall(...) enreadall(1, __VA_ARGS__)
19 #define epwriteall(...) enpwriteall(1, __VA_ARGS__)
20 #define ewritezeroes(...) enwritezeroes(1, __VA_ARGS__)
21 #define egetfile(...) engetfile(1, __VA_ARGS__)
22
23 int writeall(int fd, const void *buf, size_t n);
24
25 static inline void
26 enwriteall(int status, int fd, const void *buf, size_t n, const char *fname)
27 {
28 if (writeall(fd, buf, n))
29 enprintf(status, "write %s:", fname);
30 }
31
32 ssize_t readall(int fd, void *buf, size_t n);
33
34 static inline size_t
35 enreadall(int status, int fd, void *buf, size_t n, const char *fname)
36 {
37 ssize_t r = readall(fd, buf, n);
38 if (r < 0)
39 enprintf(status, "read %s:", fname);
40 return (size_t)r;
41 }
42
43 int pwriteall(int fd, const void *buf, size_t n, off_t ptr);
44
45 static inline void
46 enpwriteall(int status, int fd, const void *buf, size_t n, off_t ptr, const char *fname)
47 {
48 if (pwriteall(fd, buf, n, ptr))
49 enprintf(status, "pwrite %s:", fname);
50 }
51
52 int writezeroes(int fd, const void *buf, size_t bufsize, size_t n);
53
54 static inline void
55 enwritezeroes(int status, int fd, const void *buf, size_t bufsize, size_t n, const char *fname)
56 {
57 if (writezeroes(fd, buf, bufsize, n))
58 enprintf(status, "write %s:", fname);
59 }
60
61 int getfile(int fd, void *bufp, size_t *restrict ptrp, size_t *restrict sizep);
62
63 static inline void
64 engetfile(int status, int fd, void *bufp, size_t *restrict ptrp,
65 size_t *restrict sizep, const char *fname)
66 {
67 if (getfile(fd, bufp, ptrp, sizep)) {
68 if (errno == ENOMEM)
69 enprintf(status, "realloc:");
70 else
71 enprintf(status, "read %s:", fname);
72 }
73 }