| Index: courgette/streams.cc
|
| ===================================================================
|
| --- courgette/streams.cc (revision 78901)
|
| +++ courgette/streams.cc (working copy)
|
| @@ -181,37 +181,43 @@
|
| return true;
|
| }
|
|
|
| -void SinkStream::Write(const void* data, size_t byte_count) {
|
| +CheckBool SinkStream::Write(const void* data, size_t byte_count) {
|
| buffer_.append(static_cast<const char*>(data), byte_count);
|
| + //TODO(tommi): return error on failure.
|
| + return true;
|
| }
|
|
|
| -void SinkStream::WriteVarint32(uint32 value) {
|
| +CheckBool SinkStream::WriteVarint32(uint32 value) {
|
| uint8 buffer[Varint::kMax32];
|
| uint8* end = Varint::Encode32(buffer, value);
|
| - Write(buffer, end - buffer);
|
| + return Write(buffer, end - buffer);
|
| }
|
|
|
| -void SinkStream::WriteVarint32Signed(int32 value) {
|
| +CheckBool SinkStream::WriteVarint32Signed(int32 value) {
|
| // Encode signed numbers so that numbers nearer zero have shorter
|
| // varint encoding.
|
| // 0000xxxx encoded as 000xxxx0.
|
| // 1111xxxx encoded as 000yyyy1 where yyyy is complement of xxxx.
|
| + bool ret;
|
| if (value < 0)
|
| - WriteVarint32(~value * 2 + 1);
|
| + ret = WriteVarint32(~value * 2 + 1);
|
| else
|
| - WriteVarint32(value * 2);
|
| + ret = WriteVarint32(value * 2);
|
| + return ret;
|
| }
|
|
|
| -void SinkStream::WriteSizeVarint32(size_t value) {
|
| +CheckBool SinkStream::WriteSizeVarint32(size_t value) {
|
| uint32 narrowed_value = static_cast<uint32>(value);
|
| // On 32-bit, the compiler should figure out this test always fails.
|
| LOG_ASSERT(value == narrowed_value);
|
| - WriteVarint32(narrowed_value);
|
| + return WriteVarint32(narrowed_value);
|
| }
|
|
|
| -void SinkStream::Append(SinkStream* other) {
|
| - Write(other->buffer_.c_str(), other->buffer_.size());
|
| - other->Retire();
|
| +CheckBool SinkStream::Append(SinkStream* other) {
|
| + bool ret = Write(other->buffer_.c_str(), other->buffer_.size());
|
| + if (ret)
|
| + other->Retire();
|
| + return ret;
|
| }
|
|
|
| void SinkStream::Retire() {
|
| @@ -326,35 +332,41 @@
|
|
|
| // The header for a stream set for N streams is serialized as
|
| // <version><N><length1><length2>...<lengthN>
|
| -void SinkStreamSet::CopyHeaderTo(SinkStream* header) {
|
| - header->WriteVarint32(kStreamsSerializationFormatVersion);
|
| - header->WriteSizeVarint32(count_);
|
| - for (size_t i = 0; i < count_; ++i) {
|
| - header->WriteSizeVarint32(stream(i)->Length());
|
| +CheckBool SinkStreamSet::CopyHeaderTo(SinkStream* header) {
|
| + bool ret = header->WriteVarint32(kStreamsSerializationFormatVersion);
|
| + if (ret) {
|
| + ret = header->WriteSizeVarint32(count_);
|
| + for (size_t i = 0; ret && i < count_; ++i) {
|
| + ret = header->WriteSizeVarint32(stream(i)->Length());
|
| + }
|
| }
|
| + return ret;
|
| }
|
|
|
| // Writes |this| to |combined_stream|. See SourceStreamSet::Init for the layout
|
| // of the stream metadata and contents.
|
| -bool SinkStreamSet::CopyTo(SinkStream *combined_stream) {
|
| +CheckBool SinkStreamSet::CopyTo(SinkStream *combined_stream) {
|
| SinkStream header;
|
| - CopyHeaderTo(&header);
|
| + bool ret = CopyHeaderTo(&header);
|
| + if (!ret)
|
| + return ret;
|
|
|
| // Reserve the correct amount of storage.
|
| size_t length = header.Length();
|
| for (size_t i = 0; i < count_; ++i) {
|
| length += stream(i)->Length();
|
| }
|
| - combined_stream->Reserve(length);
|
| -
|
| - combined_stream->Append(&header);
|
| - for (size_t i = 0; i < count_; ++i) {
|
| - combined_stream->Append(stream(i));
|
| + ret = combined_stream->Reserve(length);
|
| + if (ret) {
|
| + ret = combined_stream->Append(&header);
|
| + for (size_t i = 0; ret && i < count_; ++i) {
|
| + ret = combined_stream->Append(stream(i));
|
| + }
|
| }
|
| - return true;
|
| + return ret;
|
| }
|
|
|
| -bool SinkStreamSet::WriteSet(SinkStreamSet* set) {
|
| +CheckBool SinkStreamSet::WriteSet(SinkStreamSet* set) {
|
| uint32 lengths[kMaxStreams];
|
| // 'stream_count' includes all non-empty streams and all empty stream numbered
|
| // lower than a non-empty stream.
|
| @@ -367,15 +379,15 @@
|
| }
|
|
|
| SinkStream* control_stream = this->stream(0);
|
| - control_stream->WriteSizeVarint32(stream_count);
|
| - for (size_t i = 0; i < stream_count; ++i) {
|
| - control_stream->WriteSizeVarint32(lengths[i]);
|
| + bool ret = control_stream->WriteSizeVarint32(stream_count);
|
| + for (size_t i = 0; ret && i < stream_count; ++i) {
|
| + ret = control_stream->WriteSizeVarint32(lengths[i]);
|
| }
|
|
|
| - for (size_t i = 0; i < stream_count; ++i) {
|
| - this->stream(i)->Append(set->stream(i));
|
| + for (size_t i = 0; ret && i < stream_count; ++i) {
|
| + ret = this->stream(i)->Append(set->stream(i));
|
| }
|
| - return true;
|
| + return ret;
|
| }
|
|
|
| } // namespace
|
|
|