From a76ff847d63592f94fe89ebcb9da86ec775175fa Mon Sep 17 00:00:00 2001 From: Mike Rapoport Date: Thu, 30 Nov 2017 13:46:18 +0200 Subject: [PATCH] zdtm: lib: add {read,write}_data helpers Some tests expect that all the data will be handled in a single invocation of read/write system call. But it possible to have short read/write on a loaded system and this is not an error. Add helper functions that will reliably read/write the entire buffer. Signed-off-by: Mike Rapoport Signed-off-by: Andrei Vagin --- test/zdtm/lib/streamutil.c | 33 +++++++++++++++++++++++++++++++++ test/zdtm/lib/zdtmtst.h | 2 ++ 2 files changed, 35 insertions(+) diff --git a/test/zdtm/lib/streamutil.c b/test/zdtm/lib/streamutil.c index ba6645872..90305c02a 100644 --- a/test/zdtm/lib/streamutil.c +++ b/test/zdtm/lib/streamutil.c @@ -40,3 +40,36 @@ int pipe_in2out(int infd, int outfd, uint8_t *buffer, int length) } } } + +int read_data(int fd, unsigned char *buf, int size) +{ + int cur = 0; + int ret; + while (cur != size) { + ret = read(fd, buf + cur, size - cur); + if (ret <= 0) { + pr_perror("read(%d) = %d", size - cur, ret); + return -1; + } + cur += ret; + } + + return 0; +} + +int write_data(int fd, const unsigned char *buf, int size) +{ + int cur = 0; + int ret; + + while (cur != size) { + ret = write(fd, buf + cur, size - cur); + if (ret <= 0) { + pr_perror("write(%d) = %d", size - cur, ret); + return -1; + } + cur += ret; + } + + return 0; +} diff --git a/test/zdtm/lib/zdtmtst.h b/test/zdtm/lib/zdtmtst.h index cd513b9c9..737ac77cf 100644 --- a/test/zdtm/lib/zdtmtst.h +++ b/test/zdtm/lib/zdtmtst.h @@ -55,6 +55,8 @@ extern int datasum(const uint8_t *buffer, unsigned length, uint32_t *crc); /* streaming helpers */ extern int set_nonblock(int fd, int on); extern int pipe_in2out(int infd, int outfd, uint8_t *buffer, int length); +extern int read_data(int fd, unsigned char *buf, int len); +extern int write_data(int fd, const unsigned char *buf, int len); /* command line args */ struct long_opt {