aboutsummaryrefslogtreecommitdiff
path: root/src/ProtocolBuffers/UnknownFieldSet.cs
diff options
context:
space:
mode:
authorcsharptest <roger@csharptest.net>2011-06-03 14:15:21 -0500
committerrogerk <devnull@localhost>2011-06-03 14:15:21 -0500
commit123e534914df3dbdcd918ec4f8d79c47a3bf85e5 (patch)
tree036d1f3d61f9a5eb3dcb6950f35a0bd32022058e /src/ProtocolBuffers/UnknownFieldSet.cs
parentffafdaa0f9a96d17d456c844a3e554512a5c121d (diff)
downloadprotobuf-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.cs28
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
}