Add read_pipe_all()
Add a convenience function to read from a pipe until all requested data has been read.
This commit is contained in:
@@ -19,3 +19,18 @@ process_check_success(process_t proc, const char *name, bool close) {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
read_pipe_all(pipe_t pipe, char *data, size_t len) {
|
||||||
|
size_t copied = 0;
|
||||||
|
while (len > 0) {
|
||||||
|
ssize_t r = read_pipe(pipe, data, len);
|
||||||
|
if (r <= 0) {
|
||||||
|
return copied ? (ssize_t) copied : r;
|
||||||
|
}
|
||||||
|
len -= r;
|
||||||
|
data += r;
|
||||||
|
copied += r;
|
||||||
|
}
|
||||||
|
return copied;
|
||||||
|
}
|
||||||
|
|||||||
@@ -91,6 +91,9 @@ is_regular_file(const char *path);
|
|||||||
ssize_t
|
ssize_t
|
||||||
read_pipe(pipe_t pipe, char *data, size_t len);
|
read_pipe(pipe_t pipe, char *data, size_t len);
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
read_pipe_all(pipe_t pipe, char *data, size_t len);
|
||||||
|
|
||||||
void
|
void
|
||||||
close_pipe(pipe_t pipe);
|
close_pipe(pipe_t pipe);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user