Merging with master
[satune.git] / src / Serialize / serializer.cc
index cfad4e8a29b52f3c2c390072f1ca6393d411bf6f..d970676a3c446b3cea8fe6a862ff3f36f798421b 100644 (file)
@@ -45,14 +45,18 @@ Serializer::~Serializer() {
 }
 
 void Serializer::mywrite(const void *__buf, size_t __n) {
+       char *towrite=(char *) __buf;
        if (__n > SERIALBUFFERLENGTH *2) {
                if (bufferoffset != 0)
                        flushBuffer();
-               ssize_t result=write(filedesc, __buf, __n);
-               if (result != (ssize_t) __n)
-                       exit(-1);
+               while (__n > 0) {
+                       ssize_t result=write(filedesc, &towrite, __n);
+                       if (result != (ssize_t) __n)
+                               exit(-1);
+                       towrite += result;
+                       __n -= result;
+               }
        } else {
-               char *towrite=(char *) __buf;
                do  {
                        uint spacefree = bufferlength-bufferoffset;
                        uint datatowrite = spacefree > __n ? __n : spacefree;
@@ -61,6 +65,7 @@ void Serializer::mywrite(const void *__buf, size_t __n) {
 
                        if (spacefree < __n) {
                                flushBuffer();
+                               __n -= datatowrite;
                                towrite += datatowrite;
                                 __n-=datatowrite;
                        } else if (spacefree == __n) {