Fixed a bug related to submessage encoding into memory buffer.
[apps/agl-service-can-low-level.git] / pb_encode.c
index 58e03a6..995eb3d 100644 (file)
@@ -149,15 +149,14 @@ bool checkreturn pb_encode(pb_ostream_t *stream, const pb_field_t fields[], cons
     
     while (field->tag != 0)
     {
+        pb_encoder_t func = PB_ENCODERS[PB_LTYPE(field->type)];
         pData = (const char*)pData + prev_size + field->data_offset;
         pSize = (const char*)pData + field->size_offset;
         
         prev_size = field->data_size;
         if (PB_HTYPE(field->type) == PB_HTYPE_ARRAY)
             prev_size *= field->array_size;
-        
-        pb_encoder_t func = PB_ENCODERS[PB_LTYPE(field->type)];
-        
+                
         switch (PB_HTYPE(field->type))
         {
             case PB_HTYPE_REQUIRED:
@@ -377,6 +376,7 @@ bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field
     status = pb_encode(&substream, (pb_field_t*)field->ptr, src);
     
     stream->bytes_written += substream.bytes_written;
+    stream->state = substream.state;
     
     if (substream.bytes_written != size)
         return false;