gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r31658 - gnunet/src/mesh


From: gnunet
Subject: [GNUnet-SVN] r31658 - gnunet/src/mesh
Date: Sat, 21 Dec 2013 22:44:04 +0100

Author: grothoff
Date: 2013-12-21 22:44:04 +0100 (Sat, 21 Dec 2013)
New Revision: 31658

Modified:
   gnunet/src/mesh/gnunet-mesh.c
Log:
-handle partial writes and IO errors, even on stdout

Modified: gnunet/src/mesh/gnunet-mesh.c
===================================================================
--- gnunet/src/mesh/gnunet-mesh.c       2013-12-21 21:41:33 UTC (rev 31657)
+++ gnunet/src/mesh/gnunet-mesh.c       2013-12-21 21:44:04 UTC (rev 31658)
@@ -330,11 +330,27 @@
                const struct GNUNET_MessageHeader *message)
 {
   uint16_t len;
+  ssize_t done;
+  uint16_t off;
+  const char *buf;
   GNUNET_break (ch == channel);
 
   len = ntohs (message->size) - sizeof (*message);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got %u bytes\n", len);
-  write (1, (char *) &message[1], len);
+  buf = (const char *) &message[1];
+  off = 0;
+  while (off < len)
+  {
+    done = write (1, &buf[off], len - off);
+    if (done <= 0)
+    {
+      if (-1 == done)
+        GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
+                             "write");
+      return GNUNET_SYSERR;
+    }
+    off += done;
+  }
   return GNUNET_OK;
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]