cleanup: use memcpy with fixed-size structures
Use std::memcpy with fixed-size structures.
Change-Id: I569be29fc7d1dc058b67936d030afbbbbad4bd0c
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/cpld.cpp b/cpld.cpp
index 8748e78..3a65674 100644
--- a/cpld.cpp
+++ b/cpld.cpp
@@ -50,7 +50,9 @@
ipmi_ret_t CpldVersion(const uint8_t* reqBuf, uint8_t* replyBuf,
size_t* dataLen)
{
- if ((*dataLen) < sizeof(struct CpldRequest))
+ struct CpldRequest request;
+
+ if ((*dataLen) < sizeof(request))
{
std::fprintf(stderr, "Invalid command length: %u\n",
static_cast<uint32_t>(*dataLen));
@@ -64,13 +66,10 @@
// since I would expect int(uint8(0xff)) to be -1. So, just cast it
// unsigned. we're casting to an int width to avoid it thinking it's a
// letter, because it does that.
-
- const auto request =
- reinterpret_cast<const struct CpldRequest*>(&reqBuf[0]);
+ std::memcpy(&request, &reqBuf[0], sizeof(request));
std::ostringstream opath;
- opath << "/run/cpld" << static_cast<unsigned int>(request->id)
- << ".version";
+ opath << "/run/cpld" << static_cast<unsigned int>(request.id) << ".version";
// Check for file
std::error_code ec;
@@ -118,8 +117,8 @@
reply.point = static_cast<uint8_t>(point);
reply.subpoint = static_cast<uint8_t>(subpoint);
- std::memcpy(&replyBuf[0], &reply, sizeof(struct CpldReply));
- (*dataLen) = sizeof(struct CpldReply);
+ std::memcpy(&replyBuf[0], &reply, sizeof(reply));
+ (*dataLen) = sizeof(reply);
return IPMI_CC_OK;
}
diff --git a/psu.cpp b/psu.cpp
index 46e097a..1e46adc 100644
--- a/psu.cpp
+++ b/psu.cpp
@@ -47,14 +47,15 @@
ipmi_ret_t PsuHardReset(const uint8_t* reqBuf, uint8_t* replyBuf,
size_t* dataLen)
{
- if ((*dataLen) < sizeof(struct PsuResetRequest))
+ struct PsuResetRequest request;
+
+ if ((*dataLen) < sizeof(request))
{
std::fprintf(stderr, "Invalid command length: %u\n",
static_cast<uint32_t>(*dataLen));
return IPMI_CC_INVALID;
}
- struct PsuResetRequest request;
std::memcpy(&request, &reqBuf[0], sizeof(struct PsuResetRequest));
std::ofstream ofs;