[RFC wayland 11/18] os: Add wl_os_read() and wl_os_write()

Derek Foreman derekf at osg.samsung.com
Tue Feb 9 16:55:58 UTC 2016


These handle EINTR and make sure the amount requested is read into the
buffer.

Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
---
 src/wayland-os.c | 38 ++++++++++++++++++++++++++++++++++++++
 src/wayland-os.h |  6 ++++++
 2 files changed, 44 insertions(+)

diff --git a/src/wayland-os.c b/src/wayland-os.c
index 2cd6bf3..4c6ffa7 100644
--- a/src/wayland-os.c
+++ b/src/wayland-os.c
@@ -267,3 +267,41 @@ wl_os_create_anonymous_file(off_t size)
 
 	return fd;
 }
+
+int wl_os_write(int fd, void *buffer, int count)
+{
+	int ret;
+	int total = count;
+
+	while (count > 0) {
+		ret = write(fd, buffer, count);
+		if (ret == -1 && errno == EINTR)
+			continue;
+
+		if (ret == -1)
+			return -1;
+
+		count -= ret;
+		buffer += ret;
+	}
+	return total;
+}
+
+int wl_os_read(int fd, void *buffer, int count)
+{
+	int ret;
+	int total = count;
+
+	while (count > 0) {
+		ret = read(fd, buffer, count);
+		if (ret == -1 && errno == EINTR)
+			continue;
+
+		if (ret == -1)
+			return -1;
+
+		count -= ret;
+		buffer += ret;
+	}
+	return total;
+}
diff --git a/src/wayland-os.h b/src/wayland-os.h
index 300a343..9679214 100644
--- a/src/wayland-os.h
+++ b/src/wayland-os.h
@@ -52,6 +52,12 @@ wl_os_resize_file(int fd, off_t size);
 int
 wl_os_create_anonymous_file(off_t size);
 
+int
+wl_os_write(int fd, void *buffer, int count);
+
+int
+wl_os_read(int fd, void *buffer, int count);
+
 /*
  * The following are for wayland-os.c and the unit tests.
  * Do not use them elsewhere.
-- 
2.7.0



More information about the wayland-devel mailing list