X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fbase%2Fbuffer.cpp;h=5dfdfad5d6c8c65fa1f15f7d0e5710ba830230a2;hp=07e9d7f1c086f55c68b6b0c6b7ace45cbce47da8;hb=19a3bfd167508654566d8cf0ac32e9256839851c;hpb=d63d2c3c6cbbd574dda4f8b00ebe6c661735edd5 diff --git a/lib/base/buffer.cpp b/lib/base/buffer.cpp index 07e9d7f..5dfdfad 100644 --- a/lib/base/buffer.cpp +++ b/lib/base/buffer.cpp @@ -1,8 +1,9 @@ #include #include -#include +#include +#include +#include #include -#include void eIOBuffer::removeblock() { @@ -120,23 +121,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 +159,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; }