diff options
author | csharptest <roger@csharptest.net> | 2011-06-03 14:15:21 -0500 |
---|---|---|
committer | rogerk <devnull@localhost> | 2011-06-03 14:15:21 -0500 |
commit | 123e534914df3dbdcd918ec4f8d79c47a3bf85e5 (patch) | |
tree | 036d1f3d61f9a5eb3dcb6950f35a0bd32022058e /src/ProtocolBuffers/UnknownFieldSet.cs | |
parent | ffafdaa0f9a96d17d456c844a3e554512a5c121d (diff) | |
download | protobuf-123e534914df3dbdcd918ec4f8d79c47a3bf85e5.tar.gz protobuf-123e534914df3dbdcd918ec4f8d79c47a3bf85e5.tar.bz2 protobuf-123e534914df3dbdcd918ec4f8d79c47a3bf85e5.zip |
Canged CodedInputStream.ReadTag to use boolean result with out params to
support reading a field name rather than a field tag.
Diffstat (limited to 'src/ProtocolBuffers/UnknownFieldSet.cs')
-rw-r--r-- | src/ProtocolBuffers/UnknownFieldSet.cs | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/ProtocolBuffers/UnknownFieldSet.cs b/src/ProtocolBuffers/UnknownFieldSet.cs index 20a46936..ff6a1534 100644 --- a/src/ProtocolBuffers/UnknownFieldSet.cs +++ b/src/ProtocolBuffers/UnknownFieldSet.cs @@ -419,13 +419,19 @@ namespace Google.ProtocolBuffers /// </summary>
public Builder MergeFrom(CodedInputStream input)
{
- while (true)
+ uint tag;
+ string name;
+ while (input.ReadTag(out tag, out name))
{
- uint tag = input.ReadTag();
- if (tag == 0 || !MergeFieldFrom(tag, input))
+ if (tag == 0)
{
+ if (input.SkipField())
+ continue; //can't merge unknown without field tag
break;
}
+
+ if(!MergeFieldFrom(tag, input))
+ break;
}
return this;
}
@@ -581,11 +587,14 @@ namespace Google.ProtocolBuffers internal void MergeFrom(CodedInputStream input, ExtensionRegistry extensionRegistry, IBuilder builder)
{
- while (true)
+ uint tag;
+ string name;
+ while (input.ReadTag(out tag, out name))
{
- uint tag = input.ReadTag();
if (tag == 0)
{
+ if (input.SkipField())
+ continue; //can't merge unknown without field tag
break;
}
@@ -765,11 +774,14 @@ namespace Google.ProtocolBuffers IBuilderLite subBuilder = null;
FieldDescriptor field = null;
- while (true)
+ uint tag;
+ string name;
+ while (input.ReadTag(out tag, out name))
{
- uint tag = input.ReadTag();
if (tag == 0)
{
+ if (input.SkipField())
+ continue; //can't merge unknown without field tag
break;
}
@@ -833,7 +845,7 @@ namespace Google.ProtocolBuffers else
{
// Unknown tag. Skip it.
- if (!input.SkipField(tag))
+ if (!input.SkipField())
{
break; // end of group
}
|