diff mbox series

[V2,3/4] BUG: IPC: ipc_send_data checks data is sent

Message ID 20220308174404.1017582-3-sbabic@denx.de
State Accepted
Headers show
Series [V2,1/4] Revert "ipc_notify_receive: add timeout_ms argument" | expand

Commit Message

Stefano Babic March 8, 2022, 5:44 p.m. UTC
write() returns the number of written data, loops until all data is
writte or an error occurs.

Signed-off-by: Stefano Babic <sbabic@denx.de>
---

Changes since V1:
	- pointer to buffer must be moved after successful send

 ipc/network_ipc.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/ipc/network_ipc.c b/ipc/network_ipc.c
index eb1082c..6c8c03a 100644
--- a/ipc/network_ipc.c
+++ b/ipc/network_ipc.c
@@ -310,8 +310,18 @@  int ipc_inst_start(void)
  */
 int ipc_send_data(int connfd, char *buf, int size)
 {
-	ssize_t ret = write(connfd, buf, (size_t)size);
-	return ret != size ? -1 : (int)ret;
+	ssize_t ret;
+	ssize_t len = size;
+
+	while (len) {
+		ret = write(connfd, buf, (size_t)size);
+		if (ret < 0)
+			return ret;
+		len -= ret;
+		buf += ret;
+	}
+
+	return size;
 }
 
 void ipc_end(int connfd)