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 {