Adding SMT Interpreters
[satune.git] / src / Serialize / serializer.cc
index cfad4e8a29b52f3c2c390072f1ca6393d411bf6f..35bae4c5559c2c48069b750d81580f7a76d6e377 100644 (file)
@@ -26,14 +26,14 @@ Serializer::Serializer(const char *file) :
 void Serializer::flushBuffer() {
        ssize_t datatowrite = bufferoffset;
        ssize_t index = 0;
-       while(datatowrite) {
+       while (datatowrite) {
                ssize_t byteswritten = write(filedesc, &buffer[index], datatowrite);
                if (byteswritten == -1)
                        exit(-1);
                datatowrite -= byteswritten;
                index += byteswritten;
        }
-       bufferoffset=0;
+       bufferoffset = 0;
 }
 
 Serializer::~Serializer() {
@@ -45,31 +45,35 @@ Serializer::~Serializer() {
 }
 
 void Serializer::mywrite(const void *__buf, size_t __n) {
-       if (__n > SERIALBUFFERLENGTH *2) {
+       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 spacefree = bufferlength - bufferoffset;
                        uint datatowrite = spacefree > __n ? __n : spacefree;
                        memcpy(&buffer[bufferoffset], towrite, datatowrite);
                        bufferoffset += datatowrite;
 
                        if (spacefree < __n) {
                                flushBuffer();
+                               __n -= datatowrite;
                                towrite += datatowrite;
-                                __n-=datatowrite;
                        } else if (spacefree == __n) {
                                flushBuffer();
                                return;
                        } else {
                                return;
                        }
-               } while(true);
+               } while (true);
        }
 }