repo: rxvt-unicode-sixel
action: commit
revision: 
path_from: 
revision_from: 25306624f4512c7d447e5e0b2154768cba1c68d6:
path_to: 
revision_to: 
git.thebackupbox.net
rxvt-unicode-sixel
git clone git://git.thebackupbox.net/rxvt-unicode-sixel
commit 25306624f4512c7d447e5e0b2154768cba1c68d6
Author: Marc Lehmann 
Date:   Sun Dec 25 15:30:29 2005 +0000

    *** empty log message ***

diff --git a/src/rxvtdaemon.C b/src/rxvtdaemon.C
index 27cdeceb43ebfc6ebe84adc22120754e705aa562..
index ..a7c5dd11bf05eddc4196e7d72a787ffc6d31217c 100644
--- a/src/rxvtdaemon.C
+++ b/src/rxvtdaemon.C
@@ -26,11 +26,26 @@

 #include 
 #include 
+#include 
+#include 
 #include 
 #include 

 #include "rxvtdaemon.h"

+// works around linux kernel bug, returns EAGAIN on a blocking socket
+static ssize_t
+read_ (int fd, void *buf, size_t count)
+{
+  int ret;
+
+  do
+    ret = read (fd, buf, count);
+  while (ret < 0 && errno == EAGAIN);
+
+  return ret;
+}
+
 char *rxvt_connection::unix_sockname ()
 {
   char name[PATH_MAX];
@@ -72,7 +87,7 @@ bool rxvt_connection::recv (auto_str &data, int *len)
   uint8_t s[2];
   int l;

-  if (read (fd, s, 2) != 2)
+  if (read_ (fd, s, 2) != 2)
     return false;

   l = (s[0] << 8) + s[1];
@@ -87,7 +102,7 @@ bool rxvt_connection::recv (auto_str &data, int *len)
   if (!data)
     return false;

-  if (read (fd, data, l) != l)
+  if (read_ (fd, data, l) != l)
     return false;

   data[l] = 0;
@@ -108,7 +123,7 @@ bool rxvt_connection::recv (int &data)
 {
   uint8_t s[4];

-  if (read (fd, s, 4) != 4)
+  if (read_ (fd, s, 4) != 4)
     return false;

   data = (((((s[0] << 8) | s[1]) << 8) | s[2]) << 8) | s[3];

-----END OF PAGE-----