1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#define SAFE_IO(op,F,B,L) safe_io((int (*)())(op), F,B,L) /*EXTRACT_UNMOD*/
// #define SAFE_IO(op,F,B,L) op(F,B,L) /*EXTRACT_UNMOD*/
ssize_t safe_io(int (*op)(), int fd, void *x, size_t len) /*EXTRACT_INCL*/{
int k = len;
while (k > 0) {
int ret = op(fd, x, k);
if (ret <= 0) {
if (ret && errno == EINTR) continue;
break;
}
x += ret;
k -= ret;
}
return len - k;
}
|