in source/serializer.c [22:51]
static int s_iot_st_encode_varint_negative_uint32_t(struct aws_byte_buf *buffer, uint32_t n) {
int byte_count = 0;
// & 2's complement
// ~0x7F == b-10000000
while (n & ~0x7F) {
AWS_RETURN_ERROR_IF2(
// 0xFF == b11111111
// 0x80 == b10000000
aws_byte_buf_append_byte_dynamic_secure(buffer, (uint8_t)(n & 0xFF) | 0x80) == AWS_OP_SUCCESS,
AWS_OP_ERR);
n = n >> 7;
byte_count += 1;
}
// Last Byte Math
int count = 0;
while (!(n & 0x80)) {
n = n << 1;
count += 1;
}
for (int i = 0; i < count; i++) {
n = n >> 1;
n = n | 0x80;
}
AWS_RETURN_ERROR_IF2(aws_byte_buf_append_byte_dynamic_secure(buffer, (uint8_t)n) == AWS_OP_SUCCESS, AWS_OP_ERR);
for (int i = 0; i < 10 - byte_count - 2; i++) {
AWS_RETURN_ERROR_IF2(aws_byte_buf_append_byte_dynamic_secure(buffer, 0xFF) == AWS_OP_SUCCESS, AWS_OP_ERR);
}
AWS_RETURN_ERROR_IF2(aws_byte_buf_append_byte_dynamic_secure(buffer, 0x1) == AWS_OP_SUCCESS, AWS_OP_ERR);
return AWS_OP_SUCCESS;
}