Introduction
Introduction Statistics Contact Development Disclaimer Help
efunc.h - blind - suckless command-line video editing utility
git clone git://git.suckless.org/blind
Log
Files
Refs
README
LICENSE
---
efunc.h (1576B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <sys/wait.h>
3 #include <unistd.h>
4
5 #define eexecvp(F, ...) (execvp(F, __VA_ARGS__), eprintf("exec %s:", F))
6 #define eexeclp(F, ...) (execlp(F, __VA_ARGS__), eprintf("exec %s:", F))
7
8 static inline void
9 epipe(int fds[2])
10 {
11 if (pipe(fds))
12 eprintf("pipe:");
13 }
14
15 static inline pid_t
16 efork(void)
17 {
18 pid_t ret = fork();
19 if (ret < 0)
20 eprintf("fork:");
21 return ret;
22 }
23
24 static inline void
25 edup2(int old, int new)
26 {
27 if (dup2(old, new) < 0)
28 eprintf("dup2:");
29 }
30
31 static inline int
32 edup(int fd)
33 {
34 int ret = dup(fd);
35 if (ret < 0)
36 eprintf("dup:");
37 return ret;
38 }
39
40 static inline pid_t
41 ewaitpid(pid_t pid, int *status, int flags)
42 {
43 pid_t ret = waitpid(pid, status, flags);
44 if (ret < 0)
45 eprintf("waitpid:");
46 return ret;
47 }
48
49 static inline size_t
50 eread(int fd, void *buf, size_t n, const char *fname)
51 {
52 ssize_t ret = read(fd, buf, n);
53 if (ret < 0)
54 eprintf("read %s:", fname);
55 return (size_t)ret;
56 }
57
58 static inline size_t
59 epread(int fd, void *buf, size_t n, off_t off, const char *fname)
60 {
61 ssize_t ret = pread(fd, buf, n, off);
62 if (ret < 0)
63 eprintf("pread %s:", fname);
64 return (size_t)ret;
65 }
66
67 static inline size_t
68 ewrite(int fd, void *buf, size_t n, const char *fname)
69 {
70 ssize_t ret = write(fd, buf, n);
71 if (ret < 0) {
72 if (errno == ECONNRESET)
73 raise(SIGPIPE);
74 eprintf("write %s:", fname);
75 }
76 return (size_t)ret;
77 }
78
79 static inline off_t
80 elseek(int fd, off_t offset, int whence, const char *fname)
81 {
82 off_t ret = lseek(fd, offset, whence);
83 if (ret < 0)
84 eprintf("lseek %s:", fname);
85 return ret;
86 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.