platform: pldm_msgbuf for decode_get_pdr_repository_info_resp()

Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Change-Id: I2aea00d6aa44af701bfc76c0a2fdb3f2f97c0e05
diff --git a/src/platform.c b/src/platform.c
index 1e23c9e..813fabd 100644
--- a/src/platform.c
+++ b/src/platform.c
@@ -409,6 +409,10 @@
     uint32_t *record_count, uint32_t *repository_size,
     uint32_t *largest_record_size, uint8_t *data_transfer_handle_timeout)
 {
+	struct pldm_msgbuf _buf;
+	struct pldm_msgbuf *buf = &_buf;
+	int rc;
+
 	if (msg == NULL || completion_code == NULL ||
 	    repository_state == NULL || update_time == NULL ||
 	    oem_update_time == NULL || record_count == NULL ||
@@ -417,32 +421,30 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	*completion_code = msg->payload[0];
+	rc = pldm_msgbuf_init(buf, PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES,
+			      msg->payload, payload_length);
+	if (rc) {
+		return rc;
+	}
+
+	pldm_msgbuf_extract(buf, completion_code);
 	if (PLDM_SUCCESS != *completion_code) {
 		return PLDM_SUCCESS;
 	}
 
-	if (payload_length < PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
-	struct pldm_pdr_repository_info_resp *response =
-	    (struct pldm_pdr_repository_info_resp *)msg->payload;
-
-	*repository_state = response->repository_state;
+	pldm_msgbuf_extract(buf, repository_state);
 	if (*repository_state > PLDM_FAILED) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	memcpy(update_time, response->update_time, PLDM_TIMESTAMP104_SIZE);
-	memcpy(oem_update_time, response->oem_update_time,
-	       PLDM_TIMESTAMP104_SIZE);
-	*record_count = le32toh(response->record_count);
-	*repository_size = le32toh(response->repository_size);
-	*largest_record_size = le32toh(response->largest_record_size);
-	*data_transfer_handle_timeout = response->data_transfer_handle_timeout;
+	pldm_msgbuf_extract_array(buf, update_time, PLDM_TIMESTAMP104_SIZE);
+	pldm_msgbuf_extract_array(buf, oem_update_time, PLDM_TIMESTAMP104_SIZE);
+	pldm_msgbuf_extract(buf, record_count);
+	pldm_msgbuf_extract(buf, repository_size);
+	pldm_msgbuf_extract(buf, largest_record_size);
+	pldm_msgbuf_extract(buf, data_transfer_handle_timeout);
 
-	return PLDM_SUCCESS;
+	return pldm_msgbuf_destroy(buf);
 }
 
 int encode_get_pdr_req(uint8_t instance_id, uint32_t record_hndl,