blob: a3e40e177c09eb0674e5b79ad2525208e9b11aad (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include "x.h"
bare_error
conn_read(void *buffer, void *dst, uint64_t sz)
{
conn_io_t *io = buffer;
ssize_t rsz = read(io->fd, dst, sz);
return (rsz == (ssize_t) sz) ? BARE_ERROR_NONE : BARE_ERROR_READ_FAILED;
}
bare_error
conn_write(void *buffer, const void *src, uint64_t sz)
{
conn_io_t *io = buffer;
const uint8_t *data = src;
uint64_t total = 0;
while (total < sz) {
ssize_t written = write(io->fd, data + total, sz - total);
if (written < 0) {
if (errno == EINTR)
continue;
return BARE_ERROR_WRITE_FAILED;
}
if (written == 0)
break;
total += written;
}
return (total == sz) ? BARE_ERROR_NONE : BARE_ERROR_WRITE_FAILED;
}
|