mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-23 19:05:37 +00:00
transfused: factor read_exactly out of read_message
Signed-off-by: David Sheets <dsheets@docker.com>
This commit is contained in:
parent
8580cfec80
commit
fdc8afd32d
@ -182,47 +182,46 @@ uint64_t message_id(uint64_t *message)
|
|||||||
return message[1];
|
return message[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_message(char *descr, parameters *params, int fd,
|
void read_exactly(char *descr, int fd, void *p, size_t nbyte)
|
||||||
char *buf, size_t max_read){
|
{
|
||||||
ssize_t read_count;
|
ssize_t read_count;
|
||||||
size_t upto = 0;
|
char *buf = p;
|
||||||
size_t nbyte;
|
|
||||||
uint32_t len;
|
|
||||||
|
|
||||||
do {
|
while (nbyte > 0) {
|
||||||
read_count = read(fd, buf + upto, sizeof(uint32_t) - upto);
|
read_count = read(fd, buf, nbyte);
|
||||||
if (read_count == -1) {
|
if (read_count < 0) {
|
||||||
if (errno == EAGAIN || errno == EINTR)
|
if (errno == EAGAIN || errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
die(1, params, "", "read %s: error reading: ", descr);
|
die(1, NULL, "", "read %s: error reading: ", descr);
|
||||||
}
|
}
|
||||||
if (read_count == 0)
|
if (read_count == 0)
|
||||||
die(1, params, NULL,
|
die(1, NULL, NULL, "read %s: EOF reading", descr);
|
||||||
"read %s: EOF reading length", descr);
|
nbyte -= read_count;
|
||||||
upto += read_count;
|
buf += read_count;
|
||||||
} while (upto < sizeof(uint32_t));
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int read_message(char *descr, parameters *params, int fd,
|
||||||
|
char *buf, size_t max_read)
|
||||||
|
{
|
||||||
|
size_t nbyte = sizeof(uint32_t);
|
||||||
|
uint32_t len;
|
||||||
|
|
||||||
|
read_exactly(descr, fd, buf, nbyte);
|
||||||
len = *((uint32_t *) buf);
|
len = *((uint32_t *) buf);
|
||||||
if (len > max_read)
|
if (len > max_read)
|
||||||
die(1, params, NULL,
|
die(1, params, NULL,
|
||||||
"read %s: message size %d exceeds buffer capacity %d",
|
"read %s: message size %d exceeds buffer capacity %d",
|
||||||
len, max_read);
|
len, max_read);
|
||||||
|
if (len < nbyte)
|
||||||
|
die(1, params, NULL,
|
||||||
|
"read %s: message size is %d but must be at least %d",
|
||||||
|
len, nbyte);
|
||||||
|
|
||||||
nbyte = (size_t)(len - 4);
|
buf += nbyte;
|
||||||
buf += 4;
|
nbyte = (size_t)(len - nbyte);
|
||||||
|
|
||||||
do {
|
read_exactly(descr, fd, buf, nbyte);
|
||||||
read_count = read(fd, buf, nbyte);
|
|
||||||
if (read_count < 0) {
|
|
||||||
if (errno == EAGAIN || errno == EINTR)
|
|
||||||
continue;
|
|
||||||
die(1, params, "", "read %s: error reading: ", descr);
|
|
||||||
}
|
|
||||||
if (read_count == 0)
|
|
||||||
die(1, params, NULL, "read %s: EOF reading", descr);
|
|
||||||
nbyte -= read_count;
|
|
||||||
buf += read_count;
|
|
||||||
} while (nbyte != 0);
|
|
||||||
|
|
||||||
return (int)len;
|
return (int)len;
|
||||||
}
|
}
|
||||||
@ -302,7 +301,7 @@ void write_exactly(char *descr, int fd, void *p, size_t nbyte)
|
|||||||
int write_count;
|
int write_count;
|
||||||
char *buf = p;
|
char *buf = p;
|
||||||
|
|
||||||
do {
|
while (nbyte > 0) {
|
||||||
write_count = write(fd, buf, nbyte);
|
write_count = write(fd, buf, nbyte);
|
||||||
if (write_count < 0) {
|
if (write_count < 0) {
|
||||||
if (errno == EINTR || errno == EAGAIN)
|
if (errno == EINTR || errno == EAGAIN)
|
||||||
@ -314,7 +313,7 @@ void write_exactly(char *descr, int fd, void *p, size_t nbyte)
|
|||||||
|
|
||||||
nbyte -= write_count;
|
nbyte -= write_count;
|
||||||
buf += write_count;
|
buf += write_count;
|
||||||
} while (nbyte != 0);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void copy_outof_fuse(copy_thread_state *copy_state)
|
void copy_outof_fuse(copy_thread_state *copy_state)
|
||||||
|
Loading…
Reference in New Issue
Block a user