[CRIU] [PATCH 1/3] zdtm: lib: add {read,write}_data helpers

Mike Rapoport rppt at linux.vnet.ibm.com
Thu Nov 30 14:46:18 MSK 2017


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 <rppt at linux.vnet.ibm.com>
---
 test/zdtm/lib/streamutil.c | 29 +++++++++++++++++++++++++++++
 test/zdtm/lib/zdtmtst.h    |  2 ++
 2 files changed, 31 insertions(+)

diff --git a/test/zdtm/lib/streamutil.c b/test/zdtm/lib/streamutil.c
index ba66458..4ebe05c 100644
--- a/test/zdtm/lib/streamutil.c
+++ b/test/zdtm/lib/streamutil.c
@@ -40,3 +40,32 @@ 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)
+			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)
+			return -1;
+		cur += ret;
+	}
+
+	return 0;
+}
diff --git a/test/zdtm/lib/zdtmtst.h b/test/zdtm/lib/zdtmtst.h
index cd513b9..737ac77 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 {
-- 
2.7.4



More information about the CRIU mailing list