From 068148080975126ceac222c656ae65ee46553ef2 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sun, 17 Oct 2021 16:20:46 +0200 Subject: [PATCH] Add read_pipe_all() Add a convenience function to read from a pipe until all requested data has been read. --- app/src/util/process.c | 15 +++++++++++++++ app/src/util/process.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/app/src/util/process.c b/app/src/util/process.c index a9af4d67..5d572c26 100644 --- a/app/src/util/process.c +++ b/app/src/util/process.c @@ -61,3 +61,18 @@ get_local_file_path(const char *name) { return file_path; } + +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; +} diff --git a/app/src/util/process.h b/app/src/util/process.h index a21374b6..d6471a16 100644 --- a/app/src/util/process.h +++ b/app/src/util/process.h @@ -96,6 +96,9 @@ is_regular_file(const char *path); ssize_t read_pipe(pipe_t pipe, char *data, size_t len); +ssize_t +read_pipe_all(pipe_t pipe, char *data, size_t len); + void close_pipe(pipe_t pipe);