restart previous running services in onClose event
[enigma2.git] / lib / base / buffer.cpp
index 07e9d7f1c086f55c68b6b0c6b7ace45cbce47da8..3a0a6a3db239239345c3b109165ef8210d821322 100644 (file)
@@ -120,23 +120,25 @@ int eIOBuffer::fromfile(int fd, int len)
        while (len)
        {
                int tc=len;
-               int r;
+               int r=0;
                if (buffer.empty() || (allocationsize == buffer.back().len))
                        addblock();
                if (tc > allocationsize-buffer.back().len)
                        tc=allocationsize-buffer.back().len;
                r=::read(fd, buffer.back().data+buffer.back().len, tc);
                buffer.back().len+=r;
-               len-=r;
                if (r < 0)
                {
-                       if (errno != EWOULDBLOCK)
-                               eDebug("read: %m");
-                       r=0;
+                       if (errno != EWOULDBLOCK && errno != EBUSY && errno != EINTR)
+                               eDebug("couldn't read: %m");
+               }
+               else
+               {
+                       len-=r;
+                       re+=r;
+                       if (r != tc)
+                               break;
                }
-               re+=r;
-               if (r != tc)
-                       break;
        }
        return re;
 }
@@ -156,7 +158,7 @@ int eIOBuffer::tofile(int fd, int len)
                w=::write(fd, buffer.front().data+ptr, tc);
                if (w < 0)
                {
-                       if (errno != EWOULDBLOCK)
+                       if (errno != EWOULDBLOCK && errno != EBUSY && errno != EINTR)
                                eDebug("write: %m");
                        w=0;
                }