bool SimpleReadWriter::writeHeader( const ReaderContext& context, bool sorted, int argc, const char **argv, const char *version, const char *rgLine, bool omitSQLines) { char* buffer; size_t size; size_t used; char *localBuffer = NULL; writer->inHeader(true); if (! writer->getBuffer(&buffer, &size)) { return false; } char *writerBuffer = buffer; size_t writerBufferSize = size; while (!format->writeHeader(context, buffer, size, &used, sorted, argc, argv, version, rgLine, omitSQLines)) { delete[] localBuffer; size = 2 * size; localBuffer = new char[size]; buffer = localBuffer; } if (NULL == localBuffer) { _ASSERT(writerBuffer == buffer); writer->advance((unsigned)used, 0); writer->nextBatch(); } else { size_t bytesRemainingToWrite = used; size_t bytesWritten = 0; while (bytesRemainingToWrite > 0) { size_t bytesToWrite = __min(bytesRemainingToWrite, writerBufferSize); memcpy(writerBuffer, localBuffer + bytesWritten, bytesToWrite); writer->advance(bytesToWrite); writer->nextBatch(); if (!writer->getBuffer(&writerBuffer, &writerBufferSize)) { return false; } bytesWritten += bytesToWrite; bytesRemainingToWrite -= bytesToWrite; } delete[] localBuffer; } writer->inHeader(false); return true; }