Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix #2514, change CFE_MSG_Message from union to struct #2515

Merged
merged 1 commit into from
Feb 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Fix #2514, change CFE_MSG_Message from union to struct
Having this abstract type as a "struct" makes it match the Command
and Telemetry abstract types.  Futhermore, it better conveys the
intent that this is an abstract object and should not be directly
used or accessed in other ways.

It may still be implemented as a union underneath (depending on
how MSG module chooses to implement) but that is hidden from
public API.  In the case of the default MSG module implementation,
there are just a handful of cases where it is accessed internally
as bytes, and those are simple enough to do with a cast.
  • Loading branch information
jphickey committed Feb 13, 2024
commit 777feec3ac9da50ccdabf4541ffb3cc88b752199
2 changes: 1 addition & 1 deletion modules/core_api/fsw/inc/cfe_msg_api_typedefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ typedef enum CFE_MSG_PlaybackFlag
/**
* \brief cFS generic base message
*/
typedef union CFE_MSG_Message CFE_MSG_Message_t;
typedef struct CFE_MSG_Message CFE_MSG_Message_t;

/**
* \brief cFS command header
Expand Down
2 changes: 1 addition & 1 deletion modules/core_api/ut-stubs/src/cfe_sb_handlers.c
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ void UT_DefaultHandler_CFE_SB_GetUserData(void *UserObj, UT_EntryKey_t FuncKey,
if (UT_Stub_CopyToLocal(UT_KEY(CFE_SB_GetUserData), &Result, sizeof(Result)) != sizeof(Result))
{
BytePtr = (uint8 *)MsgPtr;
if ((MsgPtr->Byte[0] & 0x10) != 0)
if ((*BytePtr & 0x10) != 0)
{
HdrSize = sizeof(CFE_MSG_CommandHeader_t);
}
Expand Down
6 changes: 4 additions & 2 deletions modules/core_private/ut-stubs/src/ut_support.c
Original file line number Diff line number Diff line change
Expand Up @@ -342,13 +342,15 @@ int32 UT_SoftwareBusSnapshotHook(void *UserObj, int32 StubRetcode, uint32 CallCo
{
UT_SoftwareBusSnapshot_Entry_t *Snapshot = UserObj;
const CFE_MSG_Message_t * MsgPtr = UT_Hook_GetArgValueByName(Context, "MsgPtr", CFE_MSG_Message_t *);
const uint8_t * BytePtr;

if (MsgPtr != NULL && Snapshot != NULL)
{
++Snapshot->Count;
if (Snapshot->SnapshotSize > 0 && Snapshot->SnapshotBuffer != NULL)
{
memcpy(Snapshot->SnapshotBuffer, &MsgPtr->Byte[Snapshot->SnapshotOffset], Snapshot->SnapshotSize);
BytePtr = (const uint8 *)MsgPtr;
memcpy(Snapshot->SnapshotBuffer, &BytePtr[Snapshot->SnapshotOffset], Snapshot->SnapshotSize);
}
}

Expand Down Expand Up @@ -535,7 +537,7 @@ uint16 UT_GetNumEventsSent(void)
*/
void UT_DisplayPkt(CFE_MSG_Message_t *MsgPtr, size_t size)
{
uint8 *BytePtr = MsgPtr->Byte;
uint8 *BytePtr = (uint8 *)MsgPtr;
size_t i;
size_t BufSize = UT_MAX_MESSAGE_LENGTH;
char DisplayMsg[UT_MAX_MESSAGE_LENGTH];
Expand Down
2 changes: 1 addition & 1 deletion modules/msg/fsw/src/cfe_msg_sechdr_checksum.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
CFE_MSG_Checksum_t CFE_MSG_ComputeCheckSum(const CFE_MSG_Message_t *MsgPtr)
{
CFE_MSG_Size_t PktLen = 0;
const uint8 * BytePtr = MsgPtr->Byte;
const uint8 * BytePtr = (const uint8 *)MsgPtr;
CFE_MSG_Checksum_t chksum = 0xFF;

/* Message already checked, no error case reachable */
Expand Down
5 changes: 2 additions & 3 deletions modules/msg/option_inc/default_cfe_msg_hdr_pri.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,9 @@ typedef struct
*
* This provides the definition of CFE_MSG_Message_t
*/
union CFE_MSG_Message
struct CFE_MSG_Message
{
CCSDS_SpacePacket_t CCSDS; /**< \brief CCSDS Header (Pri or Pri + Ext) */
uint8 Byte[sizeof(CCSDS_SpacePacket_t)]; /**< \brief Byte level access */
CCSDS_SpacePacket_t CCSDS; /**< \brief CCSDS Header (Pri or Pri + Ext) */
};

/**
Expand Down
5 changes: 2 additions & 3 deletions modules/msg/option_inc/default_cfe_msg_hdr_priext.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,9 @@ typedef struct
/**
* \brief cFS generic base message
*/
union CFE_MSG_Message
struct CFE_MSG_Message
{
CCSDS_SpacePacket_t CCSDS; /**< \brief CCSDS Header (Pri or Pri + Ext) */
uint8 Byte[sizeof(CCSDS_SpacePacket_t)]; /**< \brief Byte level access */
CCSDS_SpacePacket_t CCSDS; /**< \brief CCSDS Header (Pri or Pri + Ext) */
};

/**
Expand Down
Loading