Skip to content

Commit

Permalink
Fix #2514, change CFE_MSG_Message from union to struct
Browse files Browse the repository at this point in the history
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
1 parent 8cdad66 commit 777feec
Show file tree
Hide file tree
Showing 6 changed files with 11 additions and 11 deletions.
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

0 comments on commit 777feec

Please sign in to comment.