msgbuf: Define a separate msgbuf structure for encode/decode function
Define separate msgbuf structures to avoid casting away const-qualifiers
in the msgbuf constructor function:
* pldm_msgbuf_rw: for encode functions with non const-qualified buffer
* pldm_msgbuf_ro: for decode functions with const-qualified buffer
Further, use _Generic() to keep the API ergonomic while still yielding a
compile error when wrong msgbuf type is passed.
Change-Id: I71dbcb7996e9fb402b49870fce539a939c1497e5
Signed-off-by: John Chung <john.chung@arm.com>
Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
diff --git a/tests/dsp/platform.cpp b/tests/dsp/platform.cpp
index 13a3229..3b202f1 100644
--- a/tests/dsp/platform.cpp
+++ b/tests/dsp/platform.cpp
@@ -1,3 +1,5 @@
+#include "msgbuf.hpp"
+
#include <endian.h>
#include <libpldm/base.h>
#include <libpldm/entity.h>
@@ -11,8 +13,6 @@
#include <cstring>
#include <vector>
-#include "msgbuf.h"
-
#include <gtest/gtest.h>
constexpr auto hdrSize = sizeof(pldm_msg_hdr);
@@ -468,10 +468,10 @@
alignas(pldm_msg) unsigned char data[sizeof(pldm_msg_hdr) +
PLDM_GET_PDR_MIN_RESP_BYTES +
sizeof(recordData) - 1 + 1];
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RW_DEFINE_P(buf);
int rc;
- pldm_msg* msg = new (data) pldm_msg;
+ pldm_msg* msg = new (data) pldm_msg();
rc = pldm_msgbuf_init_errno(buf, PLDM_GET_PDR_MIN_RESP_BYTES, msg->payload,
sizeof(data) - sizeof(msg->hdr));
@@ -729,10 +729,10 @@
data[sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES];
uint8_t updateTime[PLDM_TIMESTAMP104_SIZE] = {0};
uint8_t oemUpdateTime[PLDM_TIMESTAMP104_SIZE] = {0};
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RW_DEFINE_P(buf);
int rc;
- pldm_msg* msg = new (data) pldm_msg;
+ pldm_msg* msg = new (data) pldm_msg();
rc = pldm_msgbuf_init_errno(buf, PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES,
msg->payload, sizeof(data) - sizeof(msg->hdr));
@@ -1485,7 +1485,7 @@
PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES);
EXPECT_EQ(rc, PLDM_SUCCESS);
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RO_DEFINE_P(buf);
rc = pldm_msgbuf_init_errno(
buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES, request->payload,
PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES);
@@ -1523,7 +1523,7 @@
PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES);
EXPECT_EQ(rc, PLDM_SUCCESS);
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RO_DEFINE_P(buf);
rc = pldm_msgbuf_init_errno(
buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES, request->payload,
PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES);
@@ -1561,7 +1561,7 @@
PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES);
EXPECT_EQ(rc, PLDM_SUCCESS);
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RO_DEFINE_P(buf);
rc = pldm_msgbuf_init_errno(
buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES, request->payload,
PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES);
@@ -2033,7 +2033,7 @@
eventDataIntegrityChecksum, response, payloadLength);
EXPECT_EQ(rc, PLDM_SUCCESS);
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RO_DEFINE_P(buf);
rc = pldm_msgbuf_init_errno(
buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
response->payload, payloadLength);
@@ -2092,7 +2092,7 @@
response, payloadLength);
EXPECT_EQ(rc, PLDM_SUCCESS);
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RO_DEFINE_P(buf);
rc = pldm_msgbuf_init_errno(
buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
response->payload, payloadLength);
@@ -2131,7 +2131,7 @@
response, payloadLength);
EXPECT_EQ(rc, PLDM_SUCCESS);
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RO_DEFINE_P(buf);
rc = pldm_msgbuf_init_errno(
buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
response->payload, payloadLength);
@@ -2179,7 +2179,7 @@
eventDataIntegrityChecksum, response, payloadLength);
EXPECT_EQ(rc, PLDM_SUCCESS);
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RO_DEFINE_P(buf);
rc = pldm_msgbuf_init_errno(
buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
response->payload, payloadLength);
@@ -2346,9 +2346,9 @@
static constexpr const uint8_t eventData = 34;
static constexpr const uint8_t Tid = 0x03;
struct pldm_platform_event_message_req req;
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RO_DEFINE_P(buf);
+ const void* data;
size_t len;
- void* data;
PLDM_MSG_DEFINE_P(request, PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
sizeof(eventData));
@@ -2673,7 +2673,7 @@
EXPECT_EQ(rc, PLDM_SUCCESS);
- PLDM_MSGBUF_DEFINE_P(buf);
+ PLDM_MSGBUF_RO_DEFINE_P(buf);
rc = pldm_msgbuf_init_errno(
buf, PLDM_MSG_POLL_EVENT_LENGTH,