platform-mc : Migrate to placement_new from reinterpret casting

reinterpret_cast is prohibited by the C++ core guidelines because
it takes the behavior outside the language definition and gives
problems with type safety. Placement-new on the other-hand allows
to control the object storage while still properly instantiating
an object,keeping the behavior inside the C++ language
specification.

Change-Id: I006bb4a5de9f7d0cef4dbc7507f63e1d6798ddfe
Signed-off-by: Pavithra Barithaya <pavithrabarithaya07@gmail.com>
diff --git a/platform-mc/platform_manager.cpp b/platform-mc/platform_manager.cpp
index 4219b7d..1e35477 100644
--- a/platform-mc/platform_manager.cpp
+++ b/platform-mc/platform_manager.cpp
@@ -296,7 +296,7 @@
         {
             // multipart transfer
             uint32_t receivedRecordSize = responseCnt;
-            auto pdrHdr = reinterpret_cast<pldm_pdr_hdr*>(recvBuf.data());
+            auto pdrHdr = new (recvBuf.data()) pldm_pdr_hdr;
             uint16_t recordChgNum = le16toh(pdrHdr->record_change_num);
             std::vector<uint8_t> receivedPdr(recvBuf.begin(),
                                              recvBuf.begin() + responseCnt);
@@ -343,7 +343,7 @@
     std::vector<uint8_t>& recordData, uint8_t& transferCrc)
 {
     Request request(sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_get_pdr_req(0, recordHndl, dataTransferHndl,
                                  transferOpFlag, requestCnt, recordChgNum,
                                  requestMsg, PLDM_GET_PDR_REQ_BYTES);
@@ -395,7 +395,7 @@
     uint32_t& repositorySize, uint32_t& largestRecordSize)
 {
     Request request(sizeof(pldm_msg_hdr) + sizeof(uint8_t));
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_pldm_header_only(PLDM_REQUEST, 0, PLDM_PLATFORM,
                                       PLDM_GET_PDR_REPOSITORY_INFO, requestMsg);
     if (rc)
@@ -452,7 +452,7 @@
 {
     Request request(
         sizeof(pldm_msg_hdr) + PLDM_EVENT_MESSAGE_BUFFER_SIZE_REQ_BYTES);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_event_message_buffer_size_req(0, receiverMaxBufferSize,
                                                    requestMsg);
     if (rc)
@@ -512,7 +512,7 @@
         requestBytes = requestBytes - sizeof(heartbeatTimer);
     }
     Request request(sizeof(pldm_msg_hdr) + requestBytes);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_set_event_receiver_req(
         0, eventMessageGlobalEnable, protocolType,
         terminusManager.getLocalEid(), heartbeatTimer, requestMsg);
@@ -565,7 +565,7 @@
 {
     Request request(
         sizeof(pldm_msg_hdr) + PLDM_EVENT_MESSAGE_SUPPORTED_REQ_BYTES);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_event_message_supported_req(0, formatVersion, requestMsg);
     if (rc)
     {
@@ -620,7 +620,7 @@
 {
     Request request(
         sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_METADATA_REQ_BYTES);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
 
     auto rc = encode_get_fru_record_table_metadata_req(
         0, requestMsg, PLDM_GET_FRU_RECORD_TABLE_METADATA_REQ_BYTES);
@@ -689,7 +689,7 @@
     std::vector<uint8_t>& recordData)
 {
     Request request(sizeof(pldm_msg_hdr) + PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
 
     auto rc = encode_get_fru_record_table_req(
         0, dataTransferHndl, transferOpFlag, requestMsg,
diff --git a/platform-mc/sensor_manager.cpp b/platform-mc/sensor_manager.cpp
index d29e552..2f9eaa5 100644
--- a/platform-mc/sensor_manager.cpp
+++ b/platform-mc/sensor_manager.cpp
@@ -281,7 +281,7 @@
     auto tid = sensor->tid;
     auto sensorId = sensor->sensorId;
     Request request(sizeof(pldm_msg_hdr) + PLDM_GET_SENSOR_READING_REQ_BYTES);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_get_sensor_reading_req(0, sensorId, false, requestMsg);
     if (rc)
     {
diff --git a/platform-mc/terminus.cpp b/platform-mc/terminus.cpp
index 03f1ba4..d59ac26 100644
--- a/platform-mc/terminus.cpp
+++ b/platform-mc/terminus.cpp
@@ -126,7 +126,7 @@
 
     for (auto& pdr : pdrs)
     {
-        auto pdrHdr = reinterpret_cast<pldm_pdr_hdr*>(pdr.data());
+        auto pdrHdr = new (pdr.data()) pldm_pdr_hdr;
         switch (pdrHdr->type)
         {
             case PLDM_SENSOR_AUXILIARY_NAMES_PDR:
@@ -323,8 +323,7 @@
     size_t decodedPdrSize =
         sizeof(struct pldm_entity_auxiliary_names_pdr) + names_size;
     auto vPdr = std::vector<char>(decodedPdrSize);
-    auto decodedPdr =
-        reinterpret_cast<struct pldm_entity_auxiliary_names_pdr*>(vPdr.data());
+    auto decodedPdr = new (vPdr.data()) pldm_entity_auxiliary_names_pdr;
 
     auto rc = decode_entity_auxiliary_names_pdr(pdrData.data(), pdrData.size(),
                                                 decodedPdr, decodedPdrSize);
@@ -444,6 +443,7 @@
     std::vector<std::vector<std::pair<NameLanguageTag, SensorName>>>
         sensorAuxNames{};
     AuxiliaryNames nameStrings{};
+
     auto pdr =
         reinterpret_cast<const pldm_compact_numeric_sensor_pdr*>(sPdr.data());
 
diff --git a/platform-mc/terminus_manager.cpp b/platform-mc/terminus_manager.cpp
index c05d89e..1086292 100644
--- a/platform-mc/terminus_manager.cpp
+++ b/platform-mc/terminus_manager.cpp
@@ -444,7 +444,7 @@
 {
     auto instanceId = instanceIdDb.next(eid);
     Request request(sizeof(pldm_msg_hdr));
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_get_tid_req(instanceId, requestMsg);
     if (rc)
     {
@@ -490,7 +490,7 @@
 {
     auto instanceId = instanceIdDb.next(eid);
     Request request(sizeof(pldm_msg_hdr) + sizeof(pldm_set_tid_req));
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_set_tid_req(instanceId, tid, requestMsg);
     if (rc)
     {
@@ -527,7 +527,7 @@
                                               uint64_t& supportedTypes)
 {
     Request request(sizeof(pldm_msg_hdr));
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_get_types_req(0, requestMsg);
     if (rc)
     {
@@ -574,7 +574,7 @@
     pldm_tid_t tid, uint8_t type, ver32_t version, bitfield8_t* supportedCmds)
 {
     Request request(sizeof(pldm_msg_hdr) + PLDM_GET_COMMANDS_REQ_BYTES);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
 
     auto rc = encode_get_commands_req(0, type, version, requestMsg);
     if (rc)
@@ -661,7 +661,7 @@
     }
 
     auto eid = std::get<0>(mctpInfo.value());
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     requestMsg->hdr.instance_id = instanceIdDb.next(eid);
     auto rc = co_await sendRecvPldmMsgOverMctp(eid, request, responseMsg,
                                                responseLen);