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() {
}
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();
- write(filedesc, __buf, __n);
+ 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;
} else if (spacefree == __n) {
flushBuffer();
} else {
return;
}
- } while(true);
+ } while (true);
}
}