aboutsummaryrefslogtreecommitdiff
path: root/pw_protobuf/public/pw_protobuf/encoder.h
diff options
context:
space:
mode:
Diffstat (limited to 'pw_protobuf/public/pw_protobuf/encoder.h')
-rw-r--r--pw_protobuf/public/pw_protobuf/encoder.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/pw_protobuf/public/pw_protobuf/encoder.h b/pw_protobuf/public/pw_protobuf/encoder.h
index 21b12cb1f..dccc6869a 100644
--- a/pw_protobuf/public/pw_protobuf/encoder.h
+++ b/pw_protobuf/public/pw_protobuf/encoder.h
@@ -221,7 +221,7 @@ class StreamEncoder {
// Writes a repeated uint64 using packed encoding.
//
// Precondition: Encoder has no active child encoder.
- Status WritePackedUint64(uint64_t field_number, span<const uint64_t> values) {
+ Status WritePackedUint64(uint32_t field_number, span<const uint64_t> values) {
return WritePackedVarints(
field_number, values, internal::VarintType::kNormal);
}
@@ -240,7 +240,8 @@ class StreamEncoder {
//
// Precondition: Encoder has no active child encoder.
Status WriteInt32(uint32_t field_number, int32_t value) {
- return WriteUint64(field_number, value);
+ // Signed numbers are sent as 2's complement so this cast is correct.
+ return WriteUint64(field_number, static_cast<uint64_t>(value));
}
// Writes a repeated int32 using packed encoding.
@@ -268,7 +269,8 @@ class StreamEncoder {
//
// Precondition: Encoder has no active child encoder.
Status WriteInt64(uint32_t field_number, int64_t value) {
- return WriteUint64(field_number, value);
+ // Signed numbers are sent as 2's complement so this cast is correct.
+ return WriteUint64(field_number, static_cast<uint64_t>(value));
}
// Writes a repeated int64 using packed encoding.
@@ -729,16 +731,16 @@ class StreamEncoder {
}
WriteVarint(FieldKey(field_number, WireType::kDelimited))
- .IgnoreError(); // TODO(b/242598609): Handle Status properly
+ .IgnoreError(); // TODO: b/242598609 - Handle Status properly
WriteVarint(payload_size)
- .IgnoreError(); // TODO(b/242598609): Handle Status properly
+ .IgnoreError(); // TODO: b/242598609 - Handle Status properly
for (T value : values) {
if (encode_type == internal::VarintType::kZigZag) {
WriteZigzagVarint(static_cast<std::make_signed_t<T>>(value))
- .IgnoreError(); // TODO(b/242598609): Handle Status properly
+ .IgnoreError(); // TODO: b/242598609 - Handle Status properly
} else {
WriteVarint(value)
- .IgnoreError(); // TODO(b/242598609): Handle Status properly
+ .IgnoreError(); // TODO: b/242598609 - Handle Status properly
}
}