diff --git a/.clang-format b/.clang-format
index ebdee49..6da79a0 100644
--- a/.clang-format
+++ b/.clang-format
@@ -1,10 +1,117 @@
-BasedOnStyle: LLVM
-IndentWidth: 8
-UseTab: Always
-BreakBeforeBraces: Linux
-AllowShortBlocksOnASingleLine: Empty
+# SPDX-License-Identifier: GPL-2.0
+#
+# Originally from Linux v5.6
+---
+AccessModifierOffset: -4
+AlignAfterOpenBracket: Align
+AlignConsecutiveMacros: true
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+#AlignEscapedNewlines: Left # Unknown to clang-format-4.0
+AlignOperands:  Align
+AlignTrailingComments:
+  Kind: Always
+  OverEmptyLines: 1
+AllowAllParametersOfDeclarationOnNextLine: false
+AllowShortBlocksOnASingleLine: false
 AllowShortCaseLabelsOnASingleLine: false
-AllowShortFunctionsOnASingleLine: Empty
+AllowShortFunctionsOnASingleLine: None
 AllowShortIfStatementsOnASingleLine: false
 AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: false
+AlwaysBreakTemplateDeclarations: false
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:
+  AfterClass: false
+  AfterControlStatement: false
+  AfterEnum: false
+  AfterFunction: true
+  AfterNamespace: true
+  AfterObjCDeclaration: false
+  AfterStruct: false
+  AfterUnion: false
+  #AfterExternBlock: false # Unknown to clang-format-5.0
+  BeforeCatch: false
+  BeforeElse: false
+  IndentBraces: false
+  #SplitEmptyFunction: true # Unknown to clang-format-4.0
+  #SplitEmptyRecord: true # Unknown to clang-format-4.0
+  #SplitEmptyNamespace: true # Unknown to clang-format-4.0
+BreakAfterAttributes: Never
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Custom
+#BreakBeforeInheritanceComma: false # Unknown to clang-format-4.0
+BreakBeforeTernaryOperators: false
+BreakConstructorInitializersBeforeComma: false
+#BreakConstructorInitializers: BeforeComma # Unknown to clang-format-4.0
+BreakAfterJavaFieldAnnotations: false
+BreakStringLiterals: false
+ColumnLimit: 80
+CommentPragmas: '^ IWYU pragma:'
+#CompactNamespaces: false # Unknown to clang-format-4.0
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 8
+ContinuationIndentWidth: 8
+Cpp11BracedListStyle: false
+DeriveLineEnding: false
+DerivePointerAlignment: false
+DisableFormat: false
+ExperimentalAutoDetectBinPacking: false
+#FixNamespaceComments: false # Unknown to clang-format-4.0
+#IncludeBlocks: Preserve # Unknown to clang-format-5.0
+IncludeCategories:
+  - Regex: '.*'
+    Priority: 1
+IncludeIsMainRegex: '(Test)?$'
 IndentCaseLabels: false
+#IndentPPDirectives: None # Unknown to clang-format-5.0
+IndentWidth: 8
+IndentWrappedFunctionNames: false
+InsertNewlineAtEOF: true
+JavaScriptQuotes: Leave
+JavaScriptWrapImports: true
+KeepEmptyLinesAtTheStartOfBlocks: false
+LineEnding: LF
+MacroBlockBegin: ''
+MacroBlockEnd: ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: Inner
+#ObjCBinPackProtocolList: Auto # Unknown to clang-format-5.0
+ObjCBlockIndentWidth: 8
+ObjCSpaceAfterProperty: true
+ObjCSpaceBeforeProtocolList: true
+
+# Taken from git's rules
+PenaltyBreakAssignment: 10
+PenaltyBreakBeforeFirstCallParameter: 30
+PenaltyBreakComment: 10
+PenaltyBreakFirstLessLess: 0
+PenaltyBreakString: 10
+PenaltyExcessCharacter: 100
+PenaltyReturnTypeOnItsOwnLine: 60
+
+PointerAlignment: Right
+ReflowComments: false
+SortIncludes: false
+#SortUsingDeclarations: false # Unknown to clang-format-4.0
+SpaceAfterCStyleCast: false
+SpaceAfterTemplateKeyword: true
+SpaceBeforeAssignmentOperators: true
+#SpaceBeforeCtorInitializerColon: true # Unknown to clang-format-5.0
+#SpaceBeforeInheritanceColon: true # Unknown to clang-format-5.0
+SpaceBeforeParens: ControlStatements
+#SpaceBeforeRangeBasedForLoopColon: true # Unknown to clang-format-5.0
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles: false
+SpacesInContainerLiterals: false
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard: Cpp03
+TabWidth: 8
+UseTab: Always
+...
diff --git a/include/libpldm/base.h b/include/libpldm/base.h
index bb160b3..c3d1ac9 100644
--- a/include/libpldm/base.h
+++ b/include/libpldm/base.h
@@ -87,25 +87,25 @@
 	PLDM_ASYNC_REQUEST_NOTIFY, //!< Unacknowledged PLDM request messages
 } MessageType;
 
-#define PLDM_INSTANCE_MAX 31
-#define PLDM_MAX_TYPES 64
+#define PLDM_INSTANCE_MAX      31
+#define PLDM_MAX_TYPES	       64
 #define PLDM_MAX_CMDS_PER_TYPE 256
-#define PLDM_MAX_TIDS 256
+#define PLDM_MAX_TIDS	       256
 
 /* Message payload lengths */
 #define PLDM_GET_COMMANDS_REQ_BYTES 5
-#define PLDM_GET_VERSION_REQ_BYTES 6
+#define PLDM_GET_VERSION_REQ_BYTES  6
 
 /* Response lengths are inclusive of completion code */
-#define PLDM_GET_TYPES_RESP_BYTES 9
-#define PLDM_GET_TID_RESP_BYTES 2
-#define PLDM_SET_TID_RESP_BYTES 1
+#define PLDM_GET_TYPES_RESP_BYTES    9
+#define PLDM_GET_TID_RESP_BYTES	     2
+#define PLDM_SET_TID_RESP_BYTES	     1
 #define PLDM_GET_COMMANDS_RESP_BYTES 33
 /* Response data has only one version and does not contain the checksum */
-#define PLDM_GET_VERSION_RESP_BYTES 10
+#define PLDM_GET_VERSION_RESP_BYTES	 10
 #define PLDM_MULTIPART_RECEIVE_REQ_BYTES 18
 
-#define PLDM_VERSION_0 0
+#define PLDM_VERSION_0	     0
 #define PLDM_CURRENT_VERSION PLDM_VERSION_0
 
 #define PLDM_TIMESTAMP104_SIZE 13
@@ -200,11 +200,9 @@
  *  Structure representing PLDM get version request.
  */
 struct pldm_get_version_req {
-	uint32_t
-	    transfer_handle; //!< handle to identify PLDM version data transfer
+	uint32_t transfer_handle; //!< handle to identify PLDM version data transfer
 	uint8_t transfer_opflag; //!< PLDM GetVersion operation flag
-	uint8_t type; //!< PLDM Type for which version information is being
-		      //!< requested
+	uint8_t type; //!< PLDM Type for which version information is being requested
 } __attribute__((packed));
 
 /** @struct pldm_get_version_resp
@@ -541,10 +539,13 @@
  *  @param[out] section_length - The length of the requested section
  *  @return pldm_completion_codes
  */
-int decode_multipart_receive_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *pldm_type,
-    uint8_t *transfer_opflag, uint32_t *transfer_ctx, uint32_t *transfer_handle,
-    uint32_t *section_offset, uint32_t *section_length);
+int decode_multipart_receive_req(const struct pldm_msg *msg,
+				 size_t payload_length, uint8_t *pldm_type,
+				 uint8_t *transfer_opflag,
+				 uint32_t *transfer_ctx,
+				 uint32_t *transfer_handle,
+				 uint32_t *section_offset,
+				 uint32_t *section_length);
 
 /** @brief Create a PLDM response message containing only cc
  *
diff --git a/include/libpldm/bios.h b/include/libpldm/bios.h
index c8f480a..8b0f7d9 100644
--- a/include/libpldm/bios.h
+++ b/include/libpldm/bios.h
@@ -11,13 +11,13 @@
 /* Response lengths are inclusive of completion code */
 #define PLDM_GET_DATE_TIME_RESP_BYTES 8
 
-#define PLDM_GET_BIOS_TABLE_REQ_BYTES 6
-#define PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES 6
-#define PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES 6
-#define PLDM_SET_BIOS_TABLE_RESP_BYTES 5
-#define PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES 5
-#define PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES 5
-#define PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_REQ_BYTES 7
+#define PLDM_GET_BIOS_TABLE_REQ_BYTES			     6
+#define PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES		     6
+#define PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES		     6
+#define PLDM_SET_BIOS_TABLE_RESP_BYTES			     5
+#define PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES	     5
+#define PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES		     5
+#define PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_REQ_BYTES	     7
 #define PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_MIN_RESP_BYTES 6
 
 enum pldm_bios_completion_codes {
@@ -256,9 +256,9 @@
  *         'msg.payload'
  */
 int encode_set_bios_attribute_current_value_req(
-    uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_flag,
-    const uint8_t *attribute_data, size_t attribute_length,
-    struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_flag,
+	const uint8_t *attribute_data, size_t attribute_length,
+	struct pldm_msg *msg, size_t payload_length);
 
 /** @brief Decode a SetBiosAttributeCurrentValue response message
  *
@@ -276,8 +276,8 @@
  *  @return pldm_completion_codes
  */
 int decode_set_bios_attribute_current_value_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_transfer_handle);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_transfer_handle);
 
 /* SetBIOSTable */
 
@@ -427,8 +427,8 @@
  *  @return pldm_completion_codes
  */
 int encode_get_bios_attribute_current_value_by_handle_req(
-    uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_op_flag,
-    uint16_t attribute_handle, struct pldm_msg *msg);
+	uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_op_flag,
+	uint16_t attribute_handle, struct pldm_msg *msg);
 
 /** @brief Decode GetBIOSAttributeCurrentValueByHandle response packet
  *
@@ -443,9 +443,9 @@
  *  @return pldm_completion_codes
  */
 int decode_get_bios_attribute_current_value_by_handle_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_transfer_handle, uint8_t *transfer_flag,
-    struct variable_field *attribute_data);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_transfer_handle,
+	uint8_t *transfer_flag, struct variable_field *attribute_data);
 
 /** @brief Decode GetBIOSAttributeCurrentValueByHandle request packet
  *
@@ -458,9 +458,9 @@
  *  @return pldm_completion_codes
  */
 int decode_get_bios_attribute_current_value_by_handle_req(
-    const struct pldm_msg *msg, size_t payload_length,
-    uint32_t *transfer_handle, uint8_t *transfer_op_flag,
-    uint16_t *attribute_handle);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint32_t *transfer_handle, uint8_t *transfer_op_flag,
+	uint16_t *attribute_handle);
 
 /** @brief Create a PLDM response message for
  * GetBIOSAttributeCurrentValueByHandle
@@ -476,10 +476,13 @@
  *  @param[out] msg - Message will be written to this
  *  @return pldm_completion_codes
  */
-int encode_get_bios_current_value_by_handle_resp(
-    uint8_t instance_id, uint8_t completion_code, uint32_t next_transfer_handle,
-    uint8_t transfer_flag, const uint8_t *attribute_data,
-    size_t attribute_length, struct pldm_msg *msg);
+int encode_get_bios_current_value_by_handle_resp(uint8_t instance_id,
+						 uint8_t completion_code,
+						 uint32_t next_transfer_handle,
+						 uint8_t transfer_flag,
+						 const uint8_t *attribute_data,
+						 size_t attribute_length,
+						 struct pldm_msg *msg);
 
 /* SetBiosAttributeCurrentValue */
 
@@ -496,9 +499,9 @@
  *  @return pldm_completion_codes
  */
 int decode_set_bios_attribute_current_value_req(
-    const struct pldm_msg *msg, size_t payload_length,
-    uint32_t *transfer_handle, uint8_t *transfer_flag,
-    struct variable_field *attribute);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint32_t *transfer_handle, uint8_t *transfer_flag,
+	struct variable_field *attribute);
 
 /** @brief Create a PLDM response message for SetBiosAttributeCurrentValue
  *
diff --git a/include/libpldm/bios_table.h b/include/libpldm/bios_table.h
index 5a07e7b..76f41d1 100644
--- a/include/libpldm/bios_table.h
+++ b/include/libpldm/bios_table.h
@@ -57,7 +57,7 @@
 pldm_bios_table_iter_attr_entry_value(struct pldm_bios_table_iter *iter)
 {
 	return (const struct pldm_bios_attr_table_entry *)
-	    pldm_bios_table_iter_value(iter);
+		pldm_bios_table_iter_value(iter);
 }
 
 /** @brief Get the bios string table entry that the iterator ponit to
@@ -68,7 +68,7 @@
 pldm_bios_table_iter_string_entry_value(struct pldm_bios_table_iter *iter)
 {
 	return (const struct pldm_bios_string_table_entry *)
-	    pldm_bios_table_iter_value(iter);
+		pldm_bios_table_iter_value(iter);
 }
 
 /** @brief Get the bios attribute value table entry that the iterator ponit to
@@ -79,7 +79,7 @@
 pldm_bios_table_iter_attr_value_entry_value(struct pldm_bios_table_iter *iter)
 {
 	return (const struct pldm_bios_attr_val_table_entry *)
-	    pldm_bios_table_iter_value(iter);
+		pldm_bios_table_iter_value(iter);
 }
 
 /** @brief Get the length of an entry in the BIOS String Table
@@ -114,14 +114,14 @@
  *  @return Handle to identify a string in the bios string table
  */
 uint16_t pldm_bios_table_string_entry_decode_handle(
-    const struct pldm_bios_string_table_entry *entry);
+	const struct pldm_bios_string_table_entry *entry);
 
 /** @brief Get the string length for the entry
  *  @param[in] entry - Pointer to a bios string table entry
  *  @return Length of string in bytes
  */
 uint16_t pldm_bios_table_string_entry_decode_string_length(
-    const struct pldm_bios_string_table_entry *entry);
+	const struct pldm_bios_string_table_entry *entry);
 
 /** @brief Get the string(at most one less than *size* characters) from the
  * entry
@@ -131,8 +131,8 @@
  *  @return Length of the string decoded
  */
 uint16_t pldm_bios_table_string_entry_decode_string(
-    const struct pldm_bios_string_table_entry *entry, char *buffer,
-    size_t size);
+	const struct pldm_bios_string_table_entry *entry, char *buffer,
+	size_t size);
 
 /** @brief Get the string from the entry and check the validity of the
  * parameters
@@ -142,8 +142,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_string_entry_decode_string_check(
-    const struct pldm_bios_string_table_entry *entry, char *buffer,
-    size_t size);
+	const struct pldm_bios_string_table_entry *entry, char *buffer,
+	size_t size);
 
 /** @brief Find an entry in bios string table by string
  *  @param[in] table - The BIOS String Table
@@ -169,14 +169,14 @@
  *  @return handle to identify the attribute in the attribute table
  */
 uint16_t pldm_bios_table_attr_entry_decode_attribute_handle(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the attribute type of the attribute table entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return Type of the attribute table entry
  */
 uint8_t pldm_bios_table_attr_entry_decode_attribute_type(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the attribute name handle from the attribute table entry
  *  @param[in] entry - Pointer to bios attribute table entry
@@ -184,7 +184,7 @@
  *          to a string in the bios string table.
  */
 uint16_t pldm_bios_table_attr_entry_decode_string_handle(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Find an entry in attribute table by handle
  *  @param[in] table - The BIOS Attribute Table
@@ -236,8 +236,8 @@
  * pldm_bios_table_attr_entry_enum_info
  */
 void pldm_bios_table_attr_entry_enum_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_enum_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_enum_info *info);
 
 /** @brief Create an entry of BIOS Attribute Table (type: enum) and check the
  * validity of the parameters
@@ -248,15 +248,15 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_enum_encode_check(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_enum_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_enum_info *info);
 
 /** @brief Get the total number of possible values for the entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return total number of possible values
  */
 uint8_t pldm_bios_table_attr_entry_enum_decode_pv_num(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the total number of possible values for the entry and check the
  * validity of the parameters
@@ -265,14 +265,14 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_enum_decode_pv_num_check(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *pv_num);
+	const struct pldm_bios_attr_table_entry *entry, uint8_t *pv_num);
 
 /** @brief Get the total number of default values for the entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return total number of default values
  */
 uint8_t pldm_bios_table_attr_entry_enum_decode_def_num(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the total number of default values for the entry and check the
  * validity of the parameters
@@ -281,7 +281,7 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_enum_decode_def_num_check(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *def_num);
+	const struct pldm_bios_attr_table_entry *entry, uint8_t *def_num);
 
 /** @brief Get possible values string handles
  *  @param[in] entry - Pointer to bios attribute table entry
@@ -291,8 +291,8 @@
  *  @return pldm_completion_codes
  */
 uint8_t pldm_bios_table_attr_entry_enum_decode_pv_hdls(
-    const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
-    uint8_t pv_num);
+	const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
+	uint8_t pv_num);
 
 /** @brief Get possible values string handles and check the validity of the
  * parameters
@@ -304,8 +304,8 @@
  *  @return Number of PossibleValuesStringHandles decoded
  */
 int pldm_bios_table_attr_entry_enum_decode_pv_hdls_check(
-    const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
-    uint8_t pv_num);
+	const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
+	uint8_t pv_num);
 
 /** @brief Get Indices of default values
  *  @param[in] entry - Pointer to bios attribute table entry
@@ -316,8 +316,8 @@
  *  @return Number of default values decoded
  */
 uint8_t pldm_bios_table_attr_entry_enum_decode_def_indices(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *def_indices,
-    uint8_t def_num);
+	const struct pldm_bios_attr_table_entry *entry, uint8_t *def_indices,
+	uint8_t def_num);
 
 /** @struct pldm_bios_table_attr_entry_string_info
  *
@@ -342,8 +342,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_string_info_check(
-    const struct pldm_bios_table_attr_entry_string_info *info,
-    const char **errmsg);
+	const struct pldm_bios_table_attr_entry_string_info *info,
+	const char **errmsg);
 
 /** @brief Get length that an attribute entry(type: string) will take
  *  @param[in] def_str_len - Length of default string
@@ -358,8 +358,8 @@
  * pldm_bios_table_attr_entry_string_info
  */
 void pldm_bios_table_attr_entry_string_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_string_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_string_info *info);
 
 /** @brief Create an entry of BIOS Attribute Table (type: string) and check the
  * validity of the parameters
@@ -370,15 +370,15 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_string_encode_check(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_string_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_string_info *info);
 
 /** @brief Get the length of default string in bytes for the entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return length of default string in bytes
  */
 uint16_t pldm_bios_table_attr_entry_string_decode_def_string_length(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the length of default string in bytes for the entry and check the
  * validity of the parameters
@@ -387,15 +387,15 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_string_decode_def_string_length_check(
-    const struct pldm_bios_attr_table_entry *entry,
-    uint16_t *def_string_length);
+	const struct pldm_bios_attr_table_entry *entry,
+	uint16_t *def_string_length);
 
 /** @brief Get the type of string of bios attribute table entry
  *  @param[in] entry - Pointer to bios attribute table entry
  *  @return Type of the string
  */
 uint8_t pldm_bios_table_attr_entry_string_decode_string_type(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get maximum length of the string from a bios attribute table entry in
  * bytes
@@ -403,7 +403,7 @@
  *  @return Maximum length of the string
  */
 uint16_t pldm_bios_table_attr_entry_string_decode_max_length(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get minimum length of the string from a bios attribute table entry in
  * bytes
@@ -411,7 +411,7 @@
  *  @return Minimum length of the string
  */
 uint16_t pldm_bios_table_attr_entry_string_decode_min_length(
-    const struct pldm_bios_attr_table_entry *entry);
+	const struct pldm_bios_attr_table_entry *entry);
 
 /** @brief Get the default string from a bios attribute table entry
  *  @param[out] buffer - Pointer to a buffer to store the string
@@ -419,7 +419,8 @@
  *  @return Length of the string decoded
  */
 uint16_t pldm_bios_table_attr_entry_string_decode_def_string(
-    const struct pldm_bios_attr_table_entry *entry, char *buffer, size_t size);
+	const struct pldm_bios_attr_table_entry *entry, char *buffer,
+	size_t size);
 
 /** @struct pldm_bios_table_attr_entry_integer_info
  *
@@ -444,8 +445,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_integer_info_check(
-    const struct pldm_bios_table_attr_entry_integer_info *info,
-    const char **errmsg);
+	const struct pldm_bios_table_attr_entry_integer_info *info,
+	const char **errmsg);
 
 /** @brief Get length that an attribute entry(type: integer) will take
  *  @return The length that an entry(type: integer) will take
@@ -459,8 +460,8 @@
  * pldm_bios_table_attr_entry_integer_info
  */
 void pldm_bios_table_attr_entry_integer_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_integer_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_integer_info *info);
 
 /** @brief Create an entry of BIOS Attribute Table (type: integer) and check the
  * validity of the parameters
@@ -471,8 +472,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_entry_integer_encode_check(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_integer_info *info);
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_integer_info *info);
 
 /** @brief Decode the specific fields(integer) of attribute table entry
  *  @param[in] entry - Pointer to an entry of attribute table
@@ -483,22 +484,22 @@
  *  @param[out] def - The default value of the integer
  */
 void pldm_bios_table_attr_entry_integer_decode(
-    const struct pldm_bios_attr_table_entry *entry, uint64_t *lower,
-    uint64_t *upper, uint32_t *scalar, uint64_t *def);
+	const struct pldm_bios_attr_table_entry *entry, uint64_t *lower,
+	uint64_t *upper, uint32_t *scalar, uint64_t *def);
 
 /** @brief Get the attribute handle from the attribute value table entry
  *  @param[in] entry - Pointer to bios attribute value table entry
  *  @return handle to identify the attribute in the attribute value table
  */
 uint16_t pldm_bios_table_attr_value_entry_decode_attribute_handle(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get the attribute type from the attribute value table entry
  *  @param[in] entry - Pointer to bios attribute value table entry
  *  @return Type of the attribute value entry
  */
 uint8_t pldm_bios_table_attr_value_entry_decode_attribute_type(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get length that an attribute value entry(type: enum) will take
  *  @param[in] count - Total number of current values for this enumeration
@@ -518,15 +519,15 @@
  * Attribute Table) of the possible values of string handles for this attribute.
  */
 void pldm_bios_table_attr_value_entry_encode_enum(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint8_t count, const uint8_t *handles);
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint8_t count, const uint8_t *handles);
 
 /** @brief Get number of current values for the enum entry
  *  @param[in] entry - Pointer to bios attribute value table entry
  *  @return Total number of current values for this enumeration
  */
 uint8_t pldm_bios_table_attr_value_entry_enum_decode_number(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get CurrentValueStringHandleIndex
  *  @param[in] entry - Pointer to bios attribute value table entry
@@ -536,8 +537,8 @@
  *  @return Number of CurrentValueStringHandleIndex decoded.
  */
 uint8_t pldm_bios_table_attr_value_entry_enum_decode_handles(
-    const struct pldm_bios_attr_val_table_entry *entry, uint8_t *handles,
-    uint8_t number);
+	const struct pldm_bios_attr_val_table_entry *entry, uint8_t *handles,
+	uint8_t number);
 
 /** @brief Create an attribute value entry(type: enum) and check the validity of
  * the parameters
@@ -553,8 +554,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_value_entry_encode_enum_check(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint8_t count, uint8_t *handles);
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint8_t count, uint8_t *handles);
 
 /** @brief Get length that an attribute value entry(type: string) will take
  *  @param[in] string_length - Length of the current string in byte, 0 indicates
@@ -576,15 +577,15 @@
  *  @param[in] string - The current string itsel
  */
 void pldm_bios_table_attr_value_entry_encode_string(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint16_t str_length, const char *string);
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint16_t str_length, const char *string);
 
 /** @brief Get length of the current string in bytes
  *  @param [in] entry - Pointer to bios attribute value table entry
  *  @return The length of the current string in bytes
  */
 uint16_t pldm_bios_table_attr_value_entry_string_decode_length(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get Current String Itself
  *  @param[in] entry - Pointer to bios attribute value table entry
@@ -594,8 +595,8 @@
  *                                    when \p current_string is used.
  */
 void pldm_bios_table_attr_value_entry_string_decode_string(
-    const struct pldm_bios_attr_val_table_entry *entry,
-    struct variable_field *current_string);
+	const struct pldm_bios_attr_val_table_entry *entry,
+	struct variable_field *current_string);
 
 /** @brief Create an attribute value entry(type: string) and check the validity
  * of the parameters
@@ -611,8 +612,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_value_entry_encode_string_check(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint16_t str_length, const char *string);
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint16_t str_length, const char *string);
 
 /** @brief Get length that an attribute value entry(type: integer) will take
  *  @return The length that an entry(type: integer) will take
@@ -639,7 +640,7 @@
  *  @return Current Value
  */
 uint64_t pldm_bios_table_attr_value_entry_integer_decode_cv(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Create an attribute value entry(type: integer) and check the validity
  * of the parameters
@@ -663,14 +664,14 @@
  *  @return handle to identify the attribute in the attribute value table
  */
 uint16_t pldm_bios_table_attr_value_entry_decode_handle(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Get the length of the attribute value entry
  *  @param[in] entry - Pointer to bios attribute value entry
  *  @return Length of the entry
  */
 size_t pldm_bios_table_attr_value_entry_length(
-    const struct pldm_bios_attr_val_table_entry *entry);
+	const struct pldm_bios_attr_val_table_entry *entry);
 
 /** @brief Find an entry in attribute value table by handle
  *  @param[in] table - The BIOS Attribute Value Table
@@ -711,8 +712,8 @@
  *  @return pldm_completion_codes
  */
 int pldm_bios_table_attr_value_copy_and_update(
-    const void *src_table, size_t src_length, void *dest_table,
-    size_t *dest_length, const void *entry, size_t entry_length);
+	const void *src_table, size_t src_length, void *dest_table,
+	size_t *dest_length, const void *entry, size_t entry_length);
 
 /** @brief Verify the crc value of the complete table
  *  @param[in] table - Pointer to a buffer of a bios table
diff --git a/include/libpldm/firmware_update.h b/include/libpldm/firmware_update.h
index eb02558..fe89b41 100644
--- a/include/libpldm/firmware_update.h
+++ b/include/libpldm/firmware_update.h
@@ -12,21 +12,21 @@
 #include <stdint.h>
 struct variable_field;
 
-#define PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE 8
+#define PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE		 8
 #define PLDM_FWUP_INVALID_COMPONENT_COMPARISON_TIMESTAMP 0xFFFFFFFF
-#define PLDM_QUERY_DEVICE_IDENTIFIERS_REQ_BYTES 0
+#define PLDM_QUERY_DEVICE_IDENTIFIERS_REQ_BYTES		 0
 /** @brief Minimum length of device descriptor, 2 bytes for descriptor type,
  *         2 bytes for descriptor length and atleast 1 byte of descriptor data
  */
-#define PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN 5
+#define PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN    5
 #define PLDM_GET_FIRMWARE_PARAMETERS_REQ_BYTES 0
-#define PLDM_FWUP_BASELINE_TRANSFER_SIZE 32
-#define PLDM_FWUP_MIN_OUTSTANDING_REQ 1
-#define PLDM_GET_STATUS_REQ_BYTES 0
+#define PLDM_FWUP_BASELINE_TRANSFER_SIZE       32
+#define PLDM_FWUP_MIN_OUTSTANDING_REQ	       1
+#define PLDM_GET_STATUS_REQ_BYTES	       0
 /* Maximum progress percentage value*/
-#define PLDM_FWUP_MAX_PROGRESS_PERCENT 0x65
+#define PLDM_FWUP_MAX_PROGRESS_PERCENT	       0x65
 #define PLDM_CANCEL_UPDATE_COMPONENT_REQ_BYTES 0
-#define PLDM_CANCEL_UPDATE_REQ_BYTES 0
+#define PLDM_CANCEL_UPDATE_REQ_BYTES	       0
 
 /** @brief PLDM Firmware update commands
  */
@@ -575,9 +575,9 @@
  *  @return pldm_completion_codes
  */
 int decode_pldm_package_header_info(
-    const uint8_t *data, size_t length,
-    struct pldm_package_header_information *package_header_info,
-    struct variable_field *package_version_str);
+	const uint8_t *data, size_t length,
+	struct pldm_package_header_information *package_header_info,
+	struct variable_field *package_version_str);
 
 /** @brief Decode individual firmware device ID record
  *
@@ -596,12 +596,13 @@
  *  @return pldm_completion_codes
  */
 int decode_firmware_device_id_record(
-    const uint8_t *data, size_t length, uint16_t component_bitmap_bit_length,
-    struct pldm_firmware_device_id_record *fw_device_id_record,
-    struct variable_field *applicable_components,
-    struct variable_field *comp_image_set_version_str,
-    struct variable_field *record_descriptors,
-    struct variable_field *fw_device_pkg_data);
+	const uint8_t *data, size_t length,
+	uint16_t component_bitmap_bit_length,
+	struct pldm_firmware_device_id_record *fw_device_id_record,
+	struct variable_field *applicable_components,
+	struct variable_field *comp_image_set_version_str,
+	struct variable_field *record_descriptors,
+	struct variable_field *fw_device_pkg_data);
 
 /** @brief Decode the record descriptor entries in the firmware update package
  *         and the Descriptors in the QueryDeviceIDentifiers command
@@ -630,9 +631,9 @@
  *  @return pldm_completion_codes
  */
 int decode_vendor_defined_descriptor_value(
-    const uint8_t *data, size_t length, uint8_t *descriptor_title_str_type,
-    struct variable_field *descriptor_title_str,
-    struct variable_field *descriptor_data);
+	const uint8_t *data, size_t length, uint8_t *descriptor_title_str_type,
+	struct variable_field *descriptor_title_str,
+	struct variable_field *descriptor_data);
 
 /** @brief Decode individual component image information
  *
@@ -645,9 +646,9 @@
  *  @return pldm_completion_codes
  */
 int decode_pldm_comp_image_info(
-    const uint8_t *data, size_t length,
-    struct pldm_component_image_information *pldm_comp_image_info,
-    struct variable_field *comp_version_str);
+	const uint8_t *data, size_t length,
+	struct pldm_component_image_information *pldm_comp_image_info,
+	struct variable_field *comp_version_str);
 
 /** @brief Create a PLDM request message for QueryDeviceIdentifiers
  *
@@ -711,11 +712,11 @@
  *  @return pldm_completion_codes
  */
 int decode_get_firmware_parameters_resp(
-    const struct pldm_msg *msg, size_t payload_length,
-    struct pldm_get_firmware_parameters_resp *resp_data,
-    struct variable_field *active_comp_image_set_ver_str,
-    struct variable_field *pending_comp_image_set_ver_str,
-    struct variable_field *comp_parameter_table);
+	const struct pldm_msg *msg, size_t payload_length,
+	struct pldm_get_firmware_parameters_resp *resp_data,
+	struct variable_field *active_comp_image_set_ver_str,
+	struct variable_field *pending_comp_image_set_ver_str,
+	struct variable_field *comp_parameter_table);
 
 /** @brief Decode component entries in the component parameter table which is
  *         part of the response of GetFirmwareParameters command
@@ -730,10 +731,10 @@
  *  @return pldm_completion_codes
  */
 int decode_get_firmware_parameters_resp_comp_entry(
-    const uint8_t *data, size_t length,
-    struct pldm_component_parameter_entry *component_data,
-    struct variable_field *active_comp_ver_str,
-    struct variable_field *pending_comp_ver_str);
+	const uint8_t *data, size_t length,
+	struct pldm_component_parameter_entry *component_data,
+	struct variable_field *active_comp_ver_str,
+	struct variable_field *pending_comp_ver_str);
 
 /** @brief Create PLDM request message for RequestUpdate
  *
@@ -806,11 +807,12 @@
  *         'msg.payload'
  */
 int encode_pass_component_table_req(
-    uint8_t instance_id, uint8_t transfer_flag, uint16_t comp_classification,
-    uint16_t comp_identifier, uint8_t comp_classification_index,
-    uint32_t comp_comparison_stamp, uint8_t comp_ver_str_type,
-    uint8_t comp_ver_str_len, const struct variable_field *comp_ver_str,
-    struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint8_t transfer_flag,
+	uint16_t comp_classification, uint16_t comp_identifier,
+	uint8_t comp_classification_index, uint32_t comp_comparison_stamp,
+	uint8_t comp_ver_str_type, uint8_t comp_ver_str_len,
+	const struct variable_field *comp_ver_str, struct pldm_msg *msg,
+	size_t payload_length);
 
 /** @brief Decode PassComponentTable response message
  *
@@ -850,12 +852,12 @@
  *         'msg.payload'
  */
 int encode_update_component_req(
-    uint8_t instance_id, uint16_t comp_classification, uint16_t comp_identifier,
-    uint8_t comp_classification_index, uint32_t comp_comparison_stamp,
-    uint32_t comp_image_size, bitfield32_t update_option_flags,
-    uint8_t comp_ver_str_type, uint8_t comp_ver_str_len,
-    const struct variable_field *comp_ver_str, struct pldm_msg *msg,
-    size_t payload_length);
+	uint8_t instance_id, uint16_t comp_classification,
+	uint16_t comp_identifier, uint8_t comp_classification_index,
+	uint32_t comp_comparison_stamp, uint32_t comp_image_size,
+	bitfield32_t update_option_flags, uint8_t comp_ver_str_type,
+	uint8_t comp_ver_str_len, const struct variable_field *comp_ver_str,
+	struct pldm_msg *msg, size_t payload_length);
 
 /** @brief Decode UpdateComponent response message
  *
@@ -982,8 +984,9 @@
  *  @return pldm_completion_codes
  */
 int decode_apply_complete_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *apply_result,
-    bitfield16_t *comp_activation_methods_modification);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *apply_result,
+	bitfield16_t *comp_activation_methods_modification);
 
 /** @brief Create PLDM response message for ApplyComplete
  *
diff --git a/include/libpldm/fru.h b/include/libpldm/fru.h
index bb2f571..ce93e55 100644
--- a/include/libpldm/fru.h
+++ b/include/libpldm/fru.h
@@ -12,13 +12,13 @@
 #include "base.h"
 #include "utils.h"
 
-#define PLDM_GET_FRU_RECORD_TABLE_METADATA_REQ_BYTES 0
+#define PLDM_GET_FRU_RECORD_TABLE_METADATA_REQ_BYTES  0
 #define PLDM_GET_FRU_RECORD_TABLE_METADATA_RESP_BYTES 19
-#define PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES 5
-#define PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES 6
-#define PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES 6
-#define PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES 5
-#define PLDM_SET_FRU_RECORD_TABLE_RESP_BYTES 5
+#define PLDM_GET_FRU_RECORD_TABLE_REQ_BYTES	      5
+#define PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES      6
+#define PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES  6
+#define PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES	      5
+#define PLDM_SET_FRU_RECORD_TABLE_RESP_BYTES	      5
 
 #define FRU_TABLE_CHECKSUM_SIZE 4
 
@@ -84,15 +84,12 @@
 	uint8_t completion_code;	//!< completion code
 	uint8_t fru_data_major_version; //!< The major version of the FRU Record
 	uint8_t fru_data_minor_version; //!< The minor version of the FRU Record
-	uint32_t
-	    fru_table_maximum_size; //!< The size of the largest FRU Record data
+	uint32_t fru_table_maximum_size; //!< The size of the largest FRU Record data
 	uint32_t fru_table_length; //!< The total length of the FRU Record Table
 	uint16_t total_record_set_identifiers; //!< The total number of FRU
 					       //!< Record Data structures
-	uint16_t
-	    total_table_records; //!< The total number of records in the table
-	uint32_t
-	    checksum; //!< The integrity checksum on the FRU Record Table data
+	uint16_t total_table_records; //!< The total number of records in the table
+	uint32_t checksum; //!< The integrity checksum on the FRU Record Table data
 } __attribute__((packed));
 
 /** @struct pldm_get_fru_record_table_req
@@ -203,11 +200,11 @@
  *  @return pldm_completion_codes
  */
 int decode_get_fru_record_table_metadata_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *fru_data_major_version, uint8_t *fru_data_minor_version,
-    uint32_t *fru_table_maximum_size, uint32_t *fru_table_length,
-    uint16_t *total_record_set_identifiers, uint16_t *total_table_records,
-    uint32_t *checksum);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *fru_data_major_version,
+	uint8_t *fru_data_minor_version, uint32_t *fru_table_maximum_size,
+	uint32_t *fru_table_length, uint16_t *total_record_set_identifiers,
+	uint16_t *total_table_records, uint32_t *checksum);
 
 /* Responder */
 
@@ -232,11 +229,11 @@
  */
 
 int encode_get_fru_record_table_metadata_resp(
-    uint8_t instance_id, uint8_t completion_code,
-    uint8_t fru_data_major_version, uint8_t fru_data_minor_version,
-    uint32_t fru_table_maximum_size, uint32_t fru_table_length,
-    uint16_t total_record_set_identifiers, uint16_t total_table_records,
-    uint32_t checksum, struct pldm_msg *msg);
+	uint8_t instance_id, uint8_t completion_code,
+	uint8_t fru_data_major_version, uint8_t fru_data_minor_version,
+	uint32_t fru_table_maximum_size, uint32_t fru_table_length,
+	uint16_t total_record_set_identifiers, uint16_t total_table_records,
+	uint32_t checksum, struct pldm_msg *msg);
 
 /* GetFruRecordTable */
 
@@ -292,10 +289,10 @@
  *  @return pldm_completion_codes
  */
 int decode_get_fru_record_by_option_req(
-    const struct pldm_msg *msg, size_t payload_length,
-    uint32_t *data_transfer_handle, uint16_t *fru_table_handle,
-    uint16_t *record_set_identifier, uint8_t *record_type, uint8_t *field_type,
-    uint8_t *transfer_op_flag);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint32_t *data_transfer_handle, uint16_t *fru_table_handle,
+	uint16_t *record_set_identifier, uint8_t *record_type,
+	uint8_t *field_type, uint8_t *transfer_op_flag);
 
 /** @brief Encode GetFRURecordByOption response data
  *
@@ -359,10 +356,13 @@
  *  @return pldm_completion_codes
  */
 
-int decode_get_fru_record_table_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_data_transfer_handle, uint8_t *transfer_flag,
-    uint8_t *fru_record_table_data, size_t *fru_record_table_length);
+int decode_get_fru_record_table_resp(const struct pldm_msg *msg,
+				     size_t payload_length,
+				     uint8_t *completion_code,
+				     uint32_t *next_data_transfer_handle,
+				     uint8_t *transfer_flag,
+				     uint8_t *fru_record_table_data,
+				     size_t *fru_record_table_length);
 
 /** @brief Decode GetFruRecordTable response data, ensuring that the fru
  *         record table section is small enough to fit in the provided buffer.
@@ -384,10 +384,10 @@
  */
 
 int decode_get_fru_record_table_resp_safe(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_data_transfer_handle, uint8_t *transfer_flag,
-    uint8_t *fru_record_table_data, size_t *fru_record_table_length,
-    size_t max_fru_record_table_length);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_data_transfer_handle,
+	uint8_t *transfer_flag, uint8_t *fru_record_table_data,
+	size_t *fru_record_table_length, size_t max_fru_record_table_length);
 
 /** @brief Encode the FRU record in the FRU table
  *
@@ -430,10 +430,10 @@
  *         'msg.payload'
  */
 int encode_get_fru_record_by_option_req(
-    uint8_t instance_id, uint32_t data_transfer_handle,
-    uint16_t fru_table_handle, uint16_t record_set_identifier,
-    uint8_t record_type, uint8_t field_type, uint8_t transfer_op_flag,
-    struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint32_t data_transfer_handle,
+	uint16_t fru_table_handle, uint16_t record_set_identifier,
+	uint8_t record_type, uint8_t field_type, uint8_t transfer_op_flag,
+	struct pldm_msg *msg, size_t payload_length);
 
 /** @brief Decode GetFRURecordByOption response data
  *
@@ -448,9 +448,9 @@
  *  @return pldm_completion_codes
  */
 int decode_get_fru_record_by_option_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_transfer_handle, uint8_t *transfer_flag,
-    struct variable_field *fru_structure_data);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_transfer_handle,
+	uint8_t *transfer_flag, struct variable_field *fru_structure_data);
 
 /** @brief Get FRU Record Table By Option
  *  @param[in] table - The source fru record table
diff --git a/include/libpldm/oem/ibm/libpldm/file_io.h b/include/libpldm/oem/ibm/libpldm/file_io.h
index 1a4627d..5b4bb32 100644
--- a/include/libpldm/oem/ibm/libpldm/file_io.h
+++ b/include/libpldm/oem/ibm/libpldm/file_io.h
@@ -73,25 +73,25 @@
 	PLDM_FILE_TYPE_PSPD_VPD_PDD_KEYWORD = 0x16,
 };
 
-#define PLDM_RW_FILE_MEM_REQ_BYTES 20
-#define PLDM_RW_FILE_MEM_RESP_BYTES 5
-#define PLDM_GET_FILE_TABLE_REQ_BYTES 6
-#define PLDM_GET_FILE_TABLE_MIN_RESP_BYTES 6
-#define PLDM_READ_FILE_REQ_BYTES 12
-#define PLDM_READ_FILE_RESP_BYTES 5
-#define PLDM_WRITE_FILE_REQ_BYTES 12
-#define PLDM_WRITE_FILE_RESP_BYTES 5
-#define PLDM_RW_FILE_BY_TYPE_MEM_REQ_BYTES 22
-#define PLDM_RW_FILE_BY_TYPE_MEM_RESP_BYTES 5
-#define PLDM_NEW_FILE_REQ_BYTES 14
-#define PLDM_NEW_FILE_RESP_BYTES 1
-#define PLDM_RW_FILE_BY_TYPE_REQ_BYTES 14
-#define PLDM_RW_FILE_BY_TYPE_RESP_BYTES 5
-#define PLDM_FILE_ACK_REQ_BYTES 7
-#define PLDM_FILE_ACK_RESP_BYTES 1
-#define PLDM_FILE_ACK_WITH_META_DATA_REQ_BYTES 23
-#define PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES 1
-#define PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_REQ_BYTES 30
+#define PLDM_RW_FILE_MEM_REQ_BYTES			  20
+#define PLDM_RW_FILE_MEM_RESP_BYTES			  5
+#define PLDM_GET_FILE_TABLE_REQ_BYTES			  6
+#define PLDM_GET_FILE_TABLE_MIN_RESP_BYTES		  6
+#define PLDM_READ_FILE_REQ_BYTES			  12
+#define PLDM_READ_FILE_RESP_BYTES			  5
+#define PLDM_WRITE_FILE_REQ_BYTES			  12
+#define PLDM_WRITE_FILE_RESP_BYTES			  5
+#define PLDM_RW_FILE_BY_TYPE_MEM_REQ_BYTES		  22
+#define PLDM_RW_FILE_BY_TYPE_MEM_RESP_BYTES		  5
+#define PLDM_NEW_FILE_REQ_BYTES				  14
+#define PLDM_NEW_FILE_RESP_BYTES			  1
+#define PLDM_RW_FILE_BY_TYPE_REQ_BYTES			  14
+#define PLDM_RW_FILE_BY_TYPE_RESP_BYTES			  5
+#define PLDM_FILE_ACK_REQ_BYTES				  7
+#define PLDM_FILE_ACK_RESP_BYTES			  1
+#define PLDM_FILE_ACK_WITH_META_DATA_REQ_BYTES		  23
+#define PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES		  1
+#define PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_REQ_BYTES  30
 #define PLDM_NEW_FILE_AVAILABLE_WITH_META_DATA_RESP_BYTES 1
 
 /** @struct pldm_read_write_file_memory_req
@@ -774,9 +774,10 @@
  *  @return pldm_completion_codes
  */
 int encode_file_ack_with_meta_data_req(
-    uint8_t instance_id, uint16_t file_type, uint32_t file_handle,
-    uint8_t file_status, uint32_t file_meta_data_1, uint32_t file_meta_data_2,
-    uint32_t file_meta_data_3, uint32_t file_meta_data_4, struct pldm_msg *msg);
+	uint8_t instance_id, uint16_t file_type, uint32_t file_handle,
+	uint8_t file_status, uint32_t file_meta_data_1,
+	uint32_t file_meta_data_2, uint32_t file_meta_data_3,
+	uint32_t file_meta_data_4, struct pldm_msg *msg);
 
 /** @brief Decode FileAckWithMetadata command response data
  *
@@ -803,10 +804,10 @@
  * @return pldm_completion_codes
  */
 int decode_file_ack_with_meta_data_req(
-    const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
-    uint32_t *file_handle, uint8_t *file_status, uint32_t *file_meta_data_1,
-    uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
-    uint32_t *file_meta_data_4);
+	const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
+	uint32_t *file_handle, uint8_t *file_status, uint32_t *file_meta_data_1,
+	uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
+	uint32_t *file_meta_data_4);
 
 /** @brief Create a PLDM response message for FileAckWithMetadata
  *
@@ -857,10 +858,13 @@
  *  @param[out] msg - Message will be written to this
  *  @return pldm_completion_codes
  */
-int encode_new_file_with_metadata_req(
-    uint8_t instance_id, uint16_t file_type, uint32_t file_handle,
-    uint64_t length, uint32_t file_meta_data_1, uint32_t file_meta_data_2,
-    uint32_t file_meta_data_3, uint32_t file_meta_data_4, struct pldm_msg *msg);
+int encode_new_file_with_metadata_req(uint8_t instance_id, uint16_t file_type,
+				      uint32_t file_handle, uint64_t length,
+				      uint32_t file_meta_data_1,
+				      uint32_t file_meta_data_2,
+				      uint32_t file_meta_data_3,
+				      uint32_t file_meta_data_4,
+				      struct pldm_msg *msg);
 
 /** @brief Decode NewFileAvailableWithMetaData response data
  *
@@ -887,10 +891,10 @@
  *  @return pldm_completion_codes
  */
 int decode_new_file_with_metadata_req(
-    const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
-    uint32_t *file_handle, uint64_t *length, uint32_t *file_meta_data_1,
-    uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
-    uint32_t *file_meta_data_4);
+	const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
+	uint32_t *file_handle, uint64_t *length, uint32_t *file_meta_data_1,
+	uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
+	uint32_t *file_meta_data_4);
 
 /** @brief Create a PLDM response for NewFileAvailableWithMetaData
  *
diff --git a/include/libpldm/pdr.h b/include/libpldm/pdr.h
index 8b5f6a7..5443fba 100644
--- a/include/libpldm/pdr.h
+++ b/include/libpldm/pdr.h
@@ -206,9 +206,9 @@
  *  @return uint32_t - record handle assigned to PDR record
  */
 const pldm_pdr_record *pldm_pdr_fru_record_set_find_by_rsi(
-    const pldm_pdr *repo, uint16_t fru_rsi, uint16_t *terminus_handle,
-    uint16_t *entity_type, uint16_t *entity_instance_num,
-    uint16_t *container_id);
+	const pldm_pdr *repo, uint16_t fru_rsi, uint16_t *terminus_handle,
+	uint16_t *entity_type, uint16_t *entity_instance_num,
+	uint16_t *container_id);
 
 /* =========================== */
 /* Entity Association PDR APIs */
@@ -258,9 +258,9 @@
  *  @return pldm_entity_node* - opaque pointer to added entity
  */
 pldm_entity_node *pldm_entity_association_tree_add(
-    pldm_entity_association_tree *tree, pldm_entity *entity,
-    uint16_t entity_instance_number, pldm_entity_node *parent,
-    uint8_t association_type);
+	pldm_entity_association_tree *tree, pldm_entity *entity,
+	uint16_t entity_instance_number, pldm_entity_node *parent,
+	uint8_t association_type);
 
 /** @brief Visit and note each entity in the entity association tree
  *
@@ -328,8 +328,8 @@
  *  @param[in] terminus_handle - terminus handle of the terminus
  */
 void pldm_entity_association_pdr_add_from_node(
-    pldm_entity_node *node, pldm_pdr *repo, pldm_entity **entities,
-    size_t num_entities, bool is_remote, uint16_t terminus_handle);
+	pldm_entity_node *node, pldm_pdr *repo, pldm_entity **entities,
+	size_t num_entities, bool is_remote, uint16_t terminus_handle);
 
 /** @brief Find entity reference in tree
  *
@@ -375,15 +375,15 @@
  *  @param[in/out] new_tree - pointer to destination tree
  */
 void pldm_entity_association_tree_copy_root(
-    pldm_entity_association_tree *org_tree,
-    pldm_entity_association_tree *new_tree);
+	pldm_entity_association_tree *org_tree,
+	pldm_entity_association_tree *new_tree);
 
 /** @brief Destroy all the nodes of the entity association tree
  *
  *  @param[in] tree - pointer to entity association tree
  */
 void pldm_entity_association_tree_destroy_root(
-    pldm_entity_association_tree *tree);
+	pldm_entity_association_tree *tree);
 
 /** @brief Check whether the entity association tree is empty
  *
diff --git a/include/libpldm/platform.h b/include/libpldm/platform.h
index 9149da2..ead3421 100644
--- a/include/libpldm/platform.h
+++ b/include/libpldm/platform.h
@@ -13,15 +13,15 @@
 #include "pldm_types.h"
 
 /* Maximum size for request */
-#define PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES 19
-#define PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES 4
+#define PLDM_SET_STATE_EFFECTER_STATES_REQ_BYTES  19
+#define PLDM_GET_STATE_SENSOR_READINGS_REQ_BYTES  4
 #define PLDM_GET_NUMERIC_EFFECTER_VALUE_REQ_BYTES 2
-#define PLDM_GET_SENSOR_READING_REQ_BYTES 3
-#define PLDM_SET_EVENT_RECEIVER_REQ_BYTES 5
+#define PLDM_GET_SENSOR_READING_REQ_BYTES	  3
+#define PLDM_SET_EVENT_RECEIVER_REQ_BYTES	  5
 /* Response lengths are inclusive of completion code */
 #define PLDM_SET_STATE_EFFECTER_STATES_RESP_BYTES 1
 
-#define PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES 1
+#define PLDM_SET_NUMERIC_EFFECTER_VALUE_RESP_BYTES    1
 #define PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES 4
 
 #define PLDM_GET_PDR_REQ_BYTES 13
@@ -29,58 +29,58 @@
 #define PLDM_SET_EVENT_RECEIVER_RESP_BYTES 1
 
 /* Platform event supported request */
-#define PLDM_EVENT_MESSAGE_BUFFER_SIZE_REQ_BYTES 2
+#define PLDM_EVENT_MESSAGE_BUFFER_SIZE_REQ_BYTES  2
 #define PLDM_EVENT_MESSAGE_BUFFER_SIZE_RESP_BYTES 3
 
-#define PLDM_EVENT_MESSAGE_SUPPORTED_REQ_BYTES 1
+#define PLDM_EVENT_MESSAGE_SUPPORTED_REQ_BYTES	    1
 #define PLDM_EVENT_MESSAGE_SUPPORTED_MIN_RESP_BYTES 4
 
-#define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES 8
+#define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_REQ_BYTES	    8
 #define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES 4
-#define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_RESP_BYTES 14
+#define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_RESP_BYTES	    14
 #define PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_CHECKSUM_BYTES 4
 
 /* Minimum response length */
-#define PLDM_GET_PDR_MIN_RESP_BYTES 12
+#define PLDM_GET_PDR_MIN_RESP_BYTES		       12
 #define PLDM_GET_NUMERIC_EFFECTER_VALUE_MIN_RESP_BYTES 5
-#define PLDM_GET_SENSOR_READING_MIN_RESP_BYTES 8
-#define PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES 2
-#define PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES 41
+#define PLDM_GET_SENSOR_READING_MIN_RESP_BYTES	       8
+#define PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES  2
+#define PLDM_GET_PDR_REPOSITORY_INFO_RESP_BYTES	       41
 
 /* Minimum length for PLDM PlatformEventMessage request */
-#define PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES 3
+#define PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES		 3
 #define PLDM_PLATFORM_EVENT_MESSAGE_STATE_SENSOR_STATE_REQ_BYTES 6
-#define PLDM_PLATFORM_EVENT_MESSAGE_RESP_BYTES 2
-#define PLDM_PLATFORM_EVENT_MESSAGE_FORMAT_VERSION 1
+#define PLDM_PLATFORM_EVENT_MESSAGE_RESP_BYTES			 2
+#define PLDM_PLATFORM_EVENT_MESSAGE_FORMAT_VERSION		 1
 
 /* Minumum length of senson event data */
-#define PLDM_SENSOR_EVENT_DATA_MIN_LENGTH 5
-#define PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH 2
-#define PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH 3
-#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH 4
-#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH 7
-#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_8BIT_DATA_LENGTH 4
+#define PLDM_SENSOR_EVENT_DATA_MIN_LENGTH			 5
+#define PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH		 2
+#define PLDM_SENSOR_EVENT_STATE_SENSOR_STATE_DATA_LENGTH	 3
+#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH	 4
+#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH	 7
+#define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_8BIT_DATA_LENGTH	 4
 #define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_16BIT_DATA_LENGTH 5
 #define PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_32BIT_DATA_LENGTH 7
 
 /* Minimum length of data for pldmPDRRepositoryChgEvent */
-#define PLDM_PDR_REPOSITORY_CHG_EVENT_MIN_LENGTH 2
+#define PLDM_PDR_REPOSITORY_CHG_EVENT_MIN_LENGTH     2
 #define PLDM_PDR_REPOSITORY_CHANGE_RECORD_MIN_LENGTH 2
 
 /* Minimum length of numeric sensor PDR */
-#define PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH 57
+#define PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH		       57
 #define PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH 3
-#define PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH 9
+#define PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH      9
 #define PLDM_PDR_NUMERIC_SENSOR_PDR_MIN_LENGTH                                 \
 	(PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH +                            \
 	 PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH +      \
 	 PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH)
 
 #define PLDM_INVALID_EFFECTER_ID 0xFFFF
-#define PLDM_TID_RESERVED 0xFF
+#define PLDM_TID_RESERVED	 0xFF
 
 /* DSP0248 Table1 PLDM monitoring and control data types */
-#define PLDM_STR_UTF_8_MAX_LEN 256
+#define PLDM_STR_UTF_8_MAX_LEN	256
 #define PLDM_STR_UTF_16_MAX_LEN 256
 
 enum pldm_effecter_data_size {
@@ -603,9 +603,9 @@
  * @note sensor->hdr.length, .type, and .version will be set appropriately.
  */
 int encode_state_sensor_pdr(
-    struct pldm_state_sensor_pdr *sensor, size_t allocation_size,
-    const struct state_sensor_possible_states *possible_states,
-    size_t possible_states_size, size_t *actual_size);
+	struct pldm_state_sensor_pdr *sensor, size_t allocation_size,
+	const struct state_sensor_possible_states *possible_states,
+	size_t possible_states_size, size_t *actual_size);
 
 /** @union union_effecter_data_size
  *
@@ -802,9 +802,9 @@
  * @note effecter->hdr.length, .type, and .version will be set appropriately.
  */
 int encode_state_effecter_pdr(
-    struct pldm_state_effecter_pdr *effecter, size_t allocation_size,
-    const struct state_effecter_possible_states *possible_states,
-    size_t possible_states_size, size_t *actual_size);
+	struct pldm_state_effecter_pdr *effecter, size_t allocation_size,
+	const struct state_effecter_possible_states *possible_states,
+	size_t possible_states_size, size_t *actual_size);
 
 /** @struct set_effecter_state_field
  *
@@ -826,7 +826,7 @@
 				//! from. This must be different from the
 				//! present state
 	uint8_t event_state;	//!< Return a state value from a PLDM State Set
-			     //! that is associated with the sensor
+				//! that is associated with the sensor
 } __attribute__((packed)) get_sensor_state_field;
 
 /** @struct PLDM_SetStateEffecterStates_Request
@@ -1306,9 +1306,10 @@
  *         'msg.payload'
  */
 int encode_get_numeric_effecter_value_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t effecter_data_size,
-    uint8_t effecter_oper_state, const uint8_t *pending_value,
-    const uint8_t *present_value, struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint8_t completion_code,
+	uint8_t effecter_data_size, uint8_t effecter_oper_state,
+	const uint8_t *pending_value, const uint8_t *present_value,
+	struct pldm_msg *msg, size_t payload_length);
 
 /* GetSensorReading */
 
@@ -1380,11 +1381,11 @@
  *  @return pldm_completion_codes
  */
 int encode_get_pdr_repository_info_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t repository_state,
-    const uint8_t *update_time, const uint8_t *oem_update_time,
-    uint32_t record_count, uint32_t repository_size,
-    uint32_t largest_record_size, uint8_t data_transfer_handle_timeout,
-    struct pldm_msg *msg);
+	uint8_t instance_id, uint8_t completion_code, uint8_t repository_state,
+	const uint8_t *update_time, const uint8_t *oem_update_time,
+	uint32_t record_count, uint32_t repository_size,
+	uint32_t largest_record_size, uint8_t data_transfer_handle_timeout,
+	struct pldm_msg *msg);
 
 /** @brief Decode GetPDRRepositoryInfo response data
  *
@@ -1404,10 +1405,11 @@
  *  @return pldm_completion_codes
  */
 int decode_get_pdr_repository_info_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *repository_state, uint8_t *update_time, uint8_t *oem_update_time,
-    uint32_t *record_count, uint32_t *repository_size,
-    uint32_t *largest_record_size, uint8_t *data_transfer_handle_timeout);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *repository_state,
+	uint8_t *update_time, uint8_t *oem_update_time, uint32_t *record_count,
+	uint32_t *repository_size, uint32_t *largest_record_size,
+	uint8_t *data_transfer_handle_timeout);
 
 /* GetPDR */
 
@@ -1528,9 +1530,12 @@
  *  @note  Caller is responsible for memory alloc and dealloc of param
  *         'msg.payload'
  */
-int encode_set_numeric_effecter_value_req(
-    uint8_t instance_id, uint16_t effecter_id, uint8_t effecter_data_size,
-    const uint8_t *effecter_value, struct pldm_msg *msg, size_t payload_length);
+int encode_set_numeric_effecter_value_req(uint8_t instance_id,
+					  uint16_t effecter_id,
+					  uint8_t effecter_data_size,
+					  const uint8_t *effecter_value,
+					  struct pldm_msg *msg,
+					  size_t payload_length);
 
 /** @brief Decode SetNumericEffecterValue response data
  *  @param[in] msg - Request message
@@ -1613,9 +1618,9 @@
  *  @return pldm_completion_codes
  */
 int decode_poll_for_platform_event_message_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *format_version,
-    uint8_t *transfer_operation_flag, uint32_t *data_transfer_handle,
-    uint16_t *event_id_to_acknowledge);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *format_version, uint8_t *transfer_operation_flag,
+	uint32_t *data_transfer_handle, uint16_t *event_id_to_acknowledge);
 
 /** @brief Encode PlatformEventMessage response data
  *  @param[in] instance_id - Message's instance id
@@ -1650,11 +1655,11 @@
  *  'msg.payload'
  */
 int encode_poll_for_platform_event_message_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t tid,
-    uint16_t event_id, uint32_t next_data_transfer_handle,
-    uint8_t transfer_flag, uint8_t event_class, uint32_t event_data_size,
-    uint8_t *event_data, uint32_t checksum, struct pldm_msg *msg,
-    size_t payload_length);
+	uint8_t instance_id, uint8_t completion_code, uint8_t tid,
+	uint16_t event_id, uint32_t next_data_transfer_handle,
+	uint8_t transfer_flag, uint8_t event_class, uint32_t event_data_size,
+	uint8_t *event_data, uint32_t checksum, struct pldm_msg *msg,
+	size_t payload_length);
 
 /** @brief Encode PlatformEventMessage request data
  * @param[in] instance_id - Message's instance id
@@ -1670,9 +1675,9 @@
  * 'msg.payload'
  */
 int encode_platform_event_message_req(
-    uint8_t instance_id, uint8_t format_version, uint8_t tid,
-    uint8_t event_class, const uint8_t *event_data, size_t event_data_length,
-    struct pldm_msg *msg, size_t payload_length);
+	uint8_t instance_id, uint8_t format_version, uint8_t tid,
+	uint8_t event_class, const uint8_t *event_data,
+	size_t event_data_length, struct pldm_msg *msg, size_t payload_length);
 
 /** @brief Encode PollForPlatformEventMessage request data
  *  @param[in] instance_id - Message's instance id
@@ -1712,10 +1717,11 @@
  *  'msg.payload'
  */
 int decode_poll_for_platform_event_message_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *tid, uint16_t *event_id, uint32_t *next_data_transfer_handle,
-    uint8_t *transfer_flag, uint8_t *event_class, uint32_t *event_data_size,
-    void **event_data, uint32_t *event_data_integrity_checksum);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *tid, uint16_t *event_id,
+	uint32_t *next_data_transfer_handle, uint8_t *transfer_flag,
+	uint8_t *event_class, uint32_t *event_data_size, void **event_data,
+	uint32_t *event_data_integrity_checksum);
 
 /** @brief Decode PlatformEventMessage response data
  * @param[in] msg - Request message
@@ -1749,9 +1755,9 @@
  *  @note Caller is responsible for memory alloc and dealloc of param
  *  'msg.payload'
  */
-int encode_event_message_buffer_size_req(
-    uint8_t instance_id, uint16_t event_receiver_max_buffer_size,
-    struct pldm_msg *msg);
+int encode_event_message_buffer_size_req(uint8_t instance_id,
+					 uint16_t event_receiver_max_buffer_size,
+					 struct pldm_msg *msg);
 
 /** @brief Encode EventMessageSupported request data
  *
@@ -1780,11 +1786,14 @@
  *
  *  @return pldm_completion_codes
  */
-int decode_event_message_supported_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *synchrony_config, bitfield8_t *synchrony_config_support,
-    uint8_t *number_event_class_returned, uint8_t *event_class,
-    uint8_t event_class_count);
+int decode_event_message_supported_resp(const struct pldm_msg *msg,
+					size_t payload_length,
+					uint8_t *completion_code,
+					uint8_t *synchrony_config,
+					bitfield8_t *synchrony_config_support,
+					uint8_t *number_event_class_returned,
+					uint8_t *event_class,
+					uint8_t event_class_count);
 
 /** @brief Decode sensorEventData response data
  *
@@ -1867,8 +1876,8 @@
  *  @param[out] pdr_value - unpacked numeric sensor PDR struct
  */
 int decode_numeric_sensor_pdr_data(
-    const void *pdr_data, size_t pdr_data_length,
-    struct pldm_numeric_sensor_value_pdr *pdr_value);
+	const void *pdr_data, size_t pdr_data_length,
+	struct pldm_numeric_sensor_value_pdr *pdr_value);
 
 /* GetNumericEffecterValue */
 
@@ -1902,10 +1911,13 @@
  *              used for this field
  *  @return pldm_completion_codes
  */
-int decode_get_numeric_effecter_value_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *effecter_data_size, uint8_t *effecter_oper_state,
-    uint8_t *pending_value, uint8_t *present_value);
+int decode_get_numeric_effecter_value_resp(const struct pldm_msg *msg,
+					   size_t payload_length,
+					   uint8_t *completion_code,
+					   uint8_t *effecter_data_size,
+					   uint8_t *effecter_oper_state,
+					   uint8_t *pending_value,
+					   uint8_t *present_value);
 
 /** @brief Decode pldmPDRRepositoryChgEvent response data
  *
@@ -1922,9 +1934,9 @@
  *         'event_data'
  */
 int decode_pldm_pdr_repository_chg_event_data(
-    const uint8_t *event_data, size_t event_data_size,
-    uint8_t *event_data_format, uint8_t *number_of_change_records,
-    size_t *change_record_data_offset);
+	const uint8_t *event_data, size_t event_data_size,
+	uint8_t *event_data_format, uint8_t *number_of_change_records,
+	size_t *change_record_data_offset);
 
 /** @brief Encode PLDM PDR Repository Change eventData
  *  @param[in] event_data_format - Format of this event data (e.g.
@@ -1958,12 +1970,12 @@
  * 'event_data.change_records'
  */
 int encode_pldm_pdr_repository_chg_event_data(
-    uint8_t event_data_format, uint8_t number_of_change_records,
-    const uint8_t *event_data_operations,
-    const uint8_t *numbers_of_change_entries,
-    const uint32_t *const *change_entries,
-    struct pldm_pdr_repository_chg_event_data *event_data,
-    size_t *actual_change_records_size, size_t max_change_records_size);
+	uint8_t event_data_format, uint8_t number_of_change_records,
+	const uint8_t *event_data_operations,
+	const uint8_t *numbers_of_change_entries,
+	const uint32_t *const *change_entries,
+	struct pldm_pdr_repository_chg_event_data *event_data,
+	size_t *actual_change_records_size, size_t max_change_records_size);
 
 /** @brief Encode event data for a PLDM Sensor Event
  *
@@ -2004,9 +2016,9 @@
  *         'change_record_data'
  */
 int decode_pldm_pdr_repository_change_record_data(
-    const uint8_t *change_record_data, size_t change_record_data_size,
-    uint8_t *event_data_operation, uint8_t *number_of_change_entries,
-    size_t *change_entry_data_offset);
+	const uint8_t *change_record_data, size_t change_record_data_size,
+	uint8_t *event_data_operation, uint8_t *number_of_change_entries,
+	size_t *change_entry_data_offset);
 
 /* GetSensorReading */
 
@@ -2048,10 +2060,11 @@
  */
 
 int decode_get_sensor_reading_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *sensor_data_size, uint8_t *sensor_operational_state,
-    uint8_t *sensor_event_message_enable, uint8_t *present_state,
-    uint8_t *previous_state, uint8_t *event_state, uint8_t *present_reading);
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *sensor_data_size,
+	uint8_t *sensor_operational_state, uint8_t *sensor_event_message_enable,
+	uint8_t *present_state, uint8_t *previous_state, uint8_t *event_state,
+	uint8_t *present_reading);
 
 /** @brief Encode the SetEventReceiver request message
  *
diff --git a/include/libpldm/state_set.h b/include/libpldm/state_set.h
index d54bbe1..38f5aa1 100644
--- a/include/libpldm/state_set.h
+++ b/include/libpldm/state_set.h
@@ -228,7 +228,7 @@
 
 /* OEM ranges */
 #define PLDM_OEM_STATE_SET_ID_START 32768
-#define PLDM_OEM_STATE_SET_ID_END 65535
+#define PLDM_OEM_STATE_SET_ID_END   65535
 
 #ifdef __cplusplus
 }
diff --git a/src/base.c b/src/base.c
index 5e652cc..90e9c1e 100644
--- a/src/base.c
+++ b/src/base.c
@@ -52,8 +52,8 @@
 	if (msg->request == PLDM_RESPONSE) {
 		hdr->msg_type = PLDM_RESPONSE;
 	} else {
-		hdr->msg_type =
-		    msg->datagram ? PLDM_ASYNC_REQUEST_NOTIFY : PLDM_REQUEST;
+		hdr->msg_type = msg->datagram ? PLDM_ASYNC_REQUEST_NOTIFY :
+						PLDM_REQUEST;
 	}
 
 	hdr->instance = msg->instance_id;
@@ -69,7 +69,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.command = PLDM_GET_PLDM_TYPES;
@@ -84,7 +84,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.command = PLDM_GET_PLDM_COMMANDS;
@@ -95,7 +95,7 @@
 	}
 
 	struct pldm_get_commands_req *request =
-	    (struct pldm_get_commands_req *)msg->payload;
+		(struct pldm_get_commands_req *)msg->payload;
 
 	request->type = type;
 	request->version = version;
@@ -110,7 +110,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.command = PLDM_GET_PLDM_TYPES;
@@ -121,7 +121,7 @@
 	}
 
 	struct pldm_get_types_resp *response =
-	    (struct pldm_get_types_resp *)msg->payload;
+		(struct pldm_get_types_resp *)msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
 		if (types == NULL) {
@@ -145,7 +145,7 @@
 	}
 
 	struct pldm_get_commands_req *request =
-	    (struct pldm_get_commands_req *)msg->payload;
+		(struct pldm_get_commands_req *)msg->payload;
 	*type = request->type;
 	*version = request->version;
 	return PLDM_SUCCESS;
@@ -158,7 +158,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.command = PLDM_GET_PLDM_COMMANDS;
@@ -168,7 +168,7 @@
 	}
 
 	struct pldm_get_commands_resp *response =
-	    (struct pldm_get_commands_resp *)msg->payload;
+		(struct pldm_get_commands_resp *)msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
 		if (commands == NULL) {
@@ -198,7 +198,7 @@
 	}
 
 	struct pldm_get_types_resp *response =
-	    (struct pldm_get_types_resp *)msg->payload;
+		(struct pldm_get_types_resp *)msg->payload;
 
 	memcpy(&(types->byte), response->types, PLDM_MAX_TYPES / 8);
 
@@ -222,7 +222,7 @@
 	}
 
 	struct pldm_get_commands_resp *response =
-	    (struct pldm_get_commands_resp *)msg->payload;
+		(struct pldm_get_commands_resp *)msg->payload;
 
 	memcpy(&(commands->byte), response->commands,
 	       PLDM_MAX_CMDS_PER_TYPE / 8);
@@ -238,7 +238,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_BASE;
@@ -250,7 +250,7 @@
 	}
 
 	struct pldm_get_version_req *request =
-	    (struct pldm_get_version_req *)msg->payload;
+		(struct pldm_get_version_req *)msg->payload;
 	transfer_handle = htole32(transfer_handle);
 	request->transfer_handle = transfer_handle;
 	request->transfer_opflag = transfer_opflag;
@@ -268,7 +268,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_BASE;
@@ -280,7 +280,7 @@
 	}
 
 	struct pldm_get_version_resp *response =
-	    (struct pldm_get_version_resp *)msg->payload;
+		(struct pldm_get_version_resp *)msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
 		response->next_transfer_handle = htole32(next_transfer_handle);
@@ -295,13 +295,12 @@
 			   uint32_t *transfer_handle, uint8_t *transfer_opflag,
 			   uint8_t *type)
 {
-
 	if (payload_length != PLDM_GET_VERSION_REQ_BYTES) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
 	struct pldm_get_version_req *request =
-	    (struct pldm_get_version_req *)msg->payload;
+		(struct pldm_get_version_req *)msg->payload;
 	*transfer_handle = le32toh(request->transfer_handle);
 	*transfer_opflag = request->transfer_opflag;
 	*type = request->type;
@@ -328,7 +327,7 @@
 	}
 
 	struct pldm_get_version_resp *response =
-	    (struct pldm_get_version_resp *)msg->payload;
+		(struct pldm_get_version_resp *)msg->payload;
 
 	*next_transfer_handle = le32toh(response->next_transfer_handle);
 	*transfer_flag = response->transfer_flag;
@@ -343,7 +342,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.command = PLDM_GET_TID;
@@ -357,7 +356,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.command = PLDM_GET_TID;
@@ -368,7 +367,7 @@
 	}
 
 	struct pldm_get_tid_resp *response =
-	    (struct pldm_get_tid_resp *)msg->payload;
+		(struct pldm_get_tid_resp *)msg->payload;
 	response->completion_code = completion_code;
 	response->tid = tid;
 
@@ -392,7 +391,7 @@
 	}
 
 	struct pldm_get_tid_resp *response =
-	    (struct pldm_get_tid_resp *)msg->payload;
+		(struct pldm_get_tid_resp *)msg->payload;
 
 	*tid = response->tid;
 
@@ -409,7 +408,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.command = PLDM_SET_TID;
@@ -420,16 +419,19 @@
 	}
 
 	struct pldm_set_tid_req *request =
-	    (struct pldm_set_tid_req *)msg->payload;
+		(struct pldm_set_tid_req *)msg->payload;
 	request->tid = tid;
 
 	return PLDM_SUCCESS;
 }
 
-int decode_multipart_receive_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *pldm_type,
-    uint8_t *transfer_opflag, uint32_t *transfer_ctx, uint32_t *transfer_handle,
-    uint32_t *section_offset, uint32_t *section_length)
+int decode_multipart_receive_req(const struct pldm_msg *msg,
+				 size_t payload_length, uint8_t *pldm_type,
+				 uint8_t *transfer_opflag,
+				 uint32_t *transfer_ctx,
+				 uint32_t *transfer_handle,
+				 uint32_t *section_offset,
+				 uint32_t *section_length)
 {
 	if (msg == NULL || pldm_type == NULL || transfer_opflag == NULL ||
 	    transfer_ctx == NULL || transfer_handle == NULL ||
@@ -442,7 +444,7 @@
 	}
 
 	struct pldm_multipart_receive_req *request =
-	    (struct pldm_multipart_receive_req *)msg->payload;
+		(struct pldm_multipart_receive_req *)msg->payload;
 
 	if (request->pldm_type != PLDM_BASE) {
 		return PLDM_ERROR_INVALID_PLDM_TYPE;
@@ -483,7 +485,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = type;
@@ -507,7 +509,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = msg_type;
 	header.instance = instance_id;
 	header.pldm_type = pldm_type;
diff --git a/src/bios.c b/src/bios.c
index aa8cc15..70f4d28 100644
--- a/src/bios.c
+++ b/src/bios.c
@@ -10,7 +10,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_BIOS;
@@ -27,7 +27,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_BIOS;
@@ -39,7 +39,7 @@
 	}
 
 	struct pldm_get_date_time_resp *response =
-	    (struct pldm_get_date_time_resp *)msg->payload;
+		(struct pldm_get_date_time_resp *)msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
 		response->completion_code = completion_code;
@@ -74,7 +74,7 @@
 	}
 
 	struct pldm_get_date_time_resp *response =
-	    (struct pldm_get_date_time_resp *)msg->payload;
+		(struct pldm_get_date_time_resp *)msg->payload;
 
 	*seconds = response->seconds;
 	*minutes = response->minutes;
@@ -102,7 +102,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_BIOS;
@@ -114,7 +114,7 @@
 	}
 
 	struct pldm_set_date_time_req *request =
-	    (struct pldm_set_date_time_req *)msg->payload;
+		(struct pldm_set_date_time_req *)msg->payload;
 	request->seconds = dec2bcd8(seconds);
 	request->minutes = dec2bcd8(minutes);
 	request->hours = dec2bcd8(hours);
@@ -138,7 +138,7 @@
 	}
 
 	const struct pldm_set_date_time_req *request =
-	    (struct pldm_set_date_time_req *)msg->payload;
+		(struct pldm_set_date_time_req *)msg->payload;
 
 	*seconds = bcd2dec8(request->seconds);
 	*minutes = bcd2dec8(request->minutes);
@@ -164,7 +164,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_BIOS;
@@ -176,7 +176,7 @@
 	}
 
 	struct pldm_only_cc_resp *response =
-	    (struct pldm_only_cc_resp *)msg->payload;
+		(struct pldm_only_cc_resp *)msg->payload;
 	response->completion_code = completion_code;
 
 	return PLDM_SUCCESS;
@@ -210,7 +210,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_BIOS;
@@ -222,10 +222,9 @@
 	}
 
 	struct pldm_get_bios_table_resp *response =
-	    (struct pldm_get_bios_table_resp *)msg->payload;
+		(struct pldm_get_bios_table_resp *)msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
-
 		response->next_transfer_handle = htole32(next_transfer_handle);
 		response->transfer_flag = transfer_flag;
 		if (table_data != NULL &&
@@ -233,8 +232,8 @@
 				      PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES)) {
 			memcpy(response->table_data, table_data,
 			       payload_length -
-				   (sizeof(struct pldm_msg_hdr) +
-				    PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES));
+				       (sizeof(struct pldm_msg_hdr) +
+					PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES));
 		}
 	}
 	return PLDM_SUCCESS;
@@ -248,7 +247,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_BIOS;
@@ -260,7 +259,7 @@
 	}
 
 	struct pldm_get_bios_table_req *request =
-	    (struct pldm_get_bios_table_req *)msg->payload;
+		(struct pldm_get_bios_table_req *)msg->payload;
 
 	request->transfer_handle = htole32(transfer_handle);
 	request->transfer_op_flag = transfer_op_flag;
@@ -282,7 +281,7 @@
 	}
 
 	struct pldm_get_bios_table_req *request =
-	    (struct pldm_get_bios_table_req *)msg->payload;
+		(struct pldm_get_bios_table_req *)msg->payload;
 	*transfer_handle = le32toh(request->transfer_handle);
 	*transfer_op_flag = request->transfer_op_flag;
 	*table_type = request->table_type;
@@ -306,7 +305,7 @@
 	}
 
 	struct pldm_get_bios_table_resp *response =
-	    (struct pldm_get_bios_table_resp *)msg->payload;
+		(struct pldm_get_bios_table_resp *)msg->payload;
 
 	*completion_code = response->completion_code;
 
@@ -325,14 +324,14 @@
 }
 
 int encode_get_bios_attribute_current_value_by_handle_req(
-    uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_op_flag,
-    uint16_t attribute_handle, struct pldm_msg *msg)
+	uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_op_flag,
+	uint16_t attribute_handle, struct pldm_msg *msg)
 {
 	if (msg == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_BIOS;
@@ -344,8 +343,8 @@
 	}
 
 	struct pldm_get_bios_attribute_current_value_by_handle_req *request =
-	    (struct pldm_get_bios_attribute_current_value_by_handle_req *)
-		msg->payload;
+		(struct pldm_get_bios_attribute_current_value_by_handle_req *)
+			msg->payload;
 
 	request->transfer_handle = htole32(transfer_handle);
 	request->transfer_op_flag = transfer_op_flag;
@@ -354,9 +353,9 @@
 }
 
 int decode_get_bios_attribute_current_value_by_handle_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_transfer_handle, uint8_t *transfer_flag,
-    struct variable_field *attribute_data)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_transfer_handle,
+	uint8_t *transfer_flag, struct variable_field *attribute_data)
 {
 	if (msg == NULL || transfer_flag == NULL ||
 	    next_transfer_handle == NULL || completion_code == NULL) {
@@ -364,8 +363,8 @@
 	}
 
 	struct pldm_get_bios_attribute_current_value_by_handle_resp *response =
-	    (struct pldm_get_bios_attribute_current_value_by_handle_resp *)
-		msg->payload;
+		(struct pldm_get_bios_attribute_current_value_by_handle_resp *)
+			msg->payload;
 
 	*completion_code = response->completion_code;
 
@@ -388,9 +387,9 @@
 }
 
 int decode_get_bios_attribute_current_value_by_handle_req(
-    const struct pldm_msg *msg, size_t payload_length,
-    uint32_t *transfer_handle, uint8_t *transfer_op_flag,
-    uint16_t *attribute_handle)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint32_t *transfer_handle, uint8_t *transfer_op_flag,
+	uint16_t *attribute_handle)
 {
 	if (msg == NULL || transfer_handle == NULL ||
 	    transfer_op_flag == NULL || attribute_handle == NULL) {
@@ -402,8 +401,8 @@
 	}
 
 	struct pldm_get_bios_attribute_current_value_by_handle_req *request =
-	    (struct pldm_get_bios_attribute_current_value_by_handle_req *)
-		msg->payload;
+		(struct pldm_get_bios_attribute_current_value_by_handle_req *)
+			msg->payload;
 	*transfer_handle = le32toh(request->transfer_handle);
 	*transfer_op_flag = request->transfer_op_flag;
 	*attribute_handle = le16toh(request->attribute_handle);
@@ -411,16 +410,19 @@
 	return PLDM_SUCCESS;
 }
 
-int encode_get_bios_current_value_by_handle_resp(
-    uint8_t instance_id, uint8_t completion_code, uint32_t next_transfer_handle,
-    uint8_t transfer_flag, const uint8_t *attribute_data,
-    size_t attribute_length, struct pldm_msg *msg)
+int encode_get_bios_current_value_by_handle_resp(uint8_t instance_id,
+						 uint8_t completion_code,
+						 uint32_t next_transfer_handle,
+						 uint8_t transfer_flag,
+						 const uint8_t *attribute_data,
+						 size_t attribute_length,
+						 struct pldm_msg *msg)
 {
 	if (msg == NULL || attribute_data == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_BIOS;
@@ -432,11 +434,10 @@
 	}
 
 	struct pldm_get_bios_attribute_current_value_by_handle_resp *response =
-	    (struct pldm_get_bios_attribute_current_value_by_handle_resp *)
-		msg->payload;
+		(struct pldm_get_bios_attribute_current_value_by_handle_resp *)
+			msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
-
 		response->next_transfer_handle = htole32(next_transfer_handle);
 		response->transfer_flag = transfer_flag;
 		if (attribute_data != NULL) {
@@ -447,9 +448,9 @@
 	return PLDM_SUCCESS;
 }
 int encode_set_bios_attribute_current_value_req(
-    uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_flag,
-    const uint8_t *attribute_data, size_t attribute_length,
-    struct pldm_msg *msg, size_t payload_length)
+	uint8_t instance_id, uint32_t transfer_handle, uint8_t transfer_flag,
+	const uint8_t *attribute_data, size_t attribute_length,
+	struct pldm_msg *msg, size_t payload_length)
 {
 	if (msg == NULL || attribute_data == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -458,7 +459,7 @@
 	    payload_length) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_BIOS;
@@ -470,7 +471,7 @@
 	}
 
 	struct pldm_set_bios_attribute_current_value_req *request =
-	    (struct pldm_set_bios_attribute_current_value_req *)msg->payload;
+		(struct pldm_set_bios_attribute_current_value_req *)msg->payload;
 	request->transfer_handle = htole32(transfer_handle);
 	request->transfer_flag = transfer_flag;
 	memcpy(request->attribute_data, attribute_data, attribute_length);
@@ -498,7 +499,8 @@
 	}
 
 	struct pldm_set_bios_attribute_current_value_resp *response =
-	    (struct pldm_set_bios_attribute_current_value_resp *)msg->payload;
+		(struct pldm_set_bios_attribute_current_value_resp *)
+			msg->payload;
 
 	*next_transfer_handle = le32toh(response->next_transfer_handle);
 
@@ -506,9 +508,9 @@
 }
 
 int decode_set_bios_attribute_current_value_req(
-    const struct pldm_msg *msg, size_t payload_length,
-    uint32_t *transfer_handle, uint8_t *transfer_flag,
-    struct variable_field *attribute)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint32_t *transfer_handle, uint8_t *transfer_flag,
+	struct variable_field *attribute)
 {
 	if (msg == NULL || transfer_handle == NULL || transfer_flag == NULL ||
 	    attribute == NULL) {
@@ -519,11 +521,11 @@
 	}
 
 	struct pldm_set_bios_attribute_current_value_req *request =
-	    (struct pldm_set_bios_attribute_current_value_req *)msg->payload;
+		(struct pldm_set_bios_attribute_current_value_req *)msg->payload;
 	*transfer_handle = le32toh(request->transfer_handle);
 	*transfer_flag = request->transfer_flag;
 	attribute->length =
-	    payload_length - PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES;
+		payload_length - PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES;
 	attribute->ptr = request->attribute_data;
 	return PLDM_SUCCESS;
 }
@@ -536,7 +538,7 @@
 	if (msg == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_BIOS;
@@ -548,7 +550,8 @@
 	}
 
 	struct pldm_set_bios_attribute_current_value_resp *response =
-	    (struct pldm_set_bios_attribute_current_value_resp *)msg->payload;
+		(struct pldm_set_bios_attribute_current_value_resp *)
+			msg->payload;
 	response->completion_code = completion_code;
 	response->next_transfer_handle = htole32(next_transfer_handle);
 
@@ -569,7 +572,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_BIOS;
@@ -581,7 +584,7 @@
 	}
 
 	struct pldm_set_bios_table_req *request =
-	    (struct pldm_set_bios_table_req *)msg->payload;
+		(struct pldm_set_bios_table_req *)msg->payload;
 	request->transfer_handle = htole32(transfer_handle);
 	request->transfer_flag = transfer_flag;
 	request->table_type = table_type;
@@ -609,7 +612,7 @@
 	}
 
 	struct pldm_set_bios_table_resp *response =
-	    (struct pldm_set_bios_table_resp *)msg->payload;
+		(struct pldm_set_bios_table_resp *)msg->payload;
 
 	*next_transfer_handle = le32toh(response->next_transfer_handle);
 
@@ -624,7 +627,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_BIOS;
@@ -636,7 +639,7 @@
 	}
 
 	struct pldm_set_bios_table_resp *response =
-	    (struct pldm_set_bios_table_resp *)msg->payload;
+		(struct pldm_set_bios_table_resp *)msg->payload;
 	response->completion_code = completion_code;
 	response->next_transfer_handle = htole32(next_transfer_handle);
 
@@ -657,7 +660,7 @@
 	}
 
 	struct pldm_set_bios_table_req *request =
-	    (struct pldm_set_bios_table_req *)msg->payload;
+		(struct pldm_set_bios_table_req *)msg->payload;
 	*transfer_handle = le32toh(request->transfer_handle);
 	*transfer_flag = request->transfer_flag;
 	*table_type = request->table_type;
diff --git a/src/bios_table.c b/src/bios_table.c
index e9e1f3f..ceb26b1 100644
--- a/src/bios_table.c
+++ b/src/bios_table.c
@@ -78,22 +78,23 @@
 }
 
 uint16_t pldm_bios_table_string_entry_decode_handle(
-    const struct pldm_bios_string_table_entry *entry)
+	const struct pldm_bios_string_table_entry *entry)
 {
 	return le16toh(entry->string_handle);
 }
 
 uint16_t pldm_bios_table_string_entry_decode_string_length(
-    const struct pldm_bios_string_table_entry *entry)
+	const struct pldm_bios_string_table_entry *entry)
 {
 	return le16toh(entry->string_length);
 }
 
 uint16_t pldm_bios_table_string_entry_decode_string(
-    const struct pldm_bios_string_table_entry *entry, char *buffer, size_t size)
+	const struct pldm_bios_string_table_entry *entry, char *buffer,
+	size_t size)
 {
 	uint16_t length =
-	    pldm_bios_table_string_entry_decode_string_length(entry);
+		pldm_bios_table_string_entry_decode_string_length(entry);
 	length = length < (size - 1) ? length : (size - 1);
 	memcpy(buffer, entry->name, length);
 	buffer[length] = 0;
@@ -101,12 +102,13 @@
 }
 
 int pldm_bios_table_string_entry_decode_string_check(
-    const struct pldm_bios_string_table_entry *entry, char *buffer, size_t size)
+	const struct pldm_bios_string_table_entry *entry, char *buffer,
+	size_t size)
 {
 	POINTER_CHECK(entry);
 	POINTER_CHECK(buffer);
 	size_t length =
-	    pldm_bios_table_string_entry_decode_string_length(entry);
+		pldm_bios_table_string_entry_decode_string_length(entry);
 	BUFFER_SIZE_EXPECT(size, length + 1);
 	pldm_bios_table_string_entry_decode_string(entry, buffer, size);
 	return PLDM_SUCCESS;
@@ -139,19 +141,19 @@
 }
 
 uint16_t pldm_bios_table_attr_entry_decode_attribute_handle(
-    const struct pldm_bios_attr_table_entry *entry)
+	const struct pldm_bios_attr_table_entry *entry)
 {
 	return le16toh(entry->attr_handle);
 }
 
 uint8_t pldm_bios_table_attr_entry_decode_attribute_type(
-    const struct pldm_bios_attr_table_entry *entry)
+	const struct pldm_bios_attr_table_entry *entry)
 {
 	return entry->attr_type;
 }
 
 uint16_t pldm_bios_table_attr_entry_decode_string_handle(
-    const struct pldm_bios_attr_table_entry *entry)
+	const struct pldm_bios_attr_table_entry *entry)
 {
 	return le16toh(entry->string_handle);
 }
@@ -166,39 +168,39 @@
 }
 
 void pldm_bios_table_attr_entry_enum_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_enum_info *info)
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_enum_info *info)
 {
 	size_t length = pldm_bios_table_attr_entry_enum_encode_length(
-	    info->pv_num, info->def_num);
+		info->pv_num, info->def_num);
 	assert(length <= entry_length);
-	uint8_t attr_type = info->read_only ? PLDM_BIOS_ENUMERATION_READ_ONLY
-					    : PLDM_BIOS_ENUMERATION;
+	uint8_t attr_type = info->read_only ? PLDM_BIOS_ENUMERATION_READ_ONLY :
+					      PLDM_BIOS_ENUMERATION;
 	attr_table_entry_encode_header(entry, entry_length, attr_type,
 				       info->name_handle);
 	struct pldm_bios_attr_table_entry *attr_entry = entry;
 	attr_entry->metadata[0] = info->pv_num;
 	uint16_t *pv_hdls =
-	    (uint16_t *)(attr_entry->metadata + 1 /* sizeof(pv num) */);
+		(uint16_t *)(attr_entry->metadata + 1 /* sizeof(pv num) */);
 	size_t i;
 	for (i = 0; i < info->pv_num; i++) {
 		pv_hdls[i] = htole16(info->pv_handle[i]);
 	}
 	attr_entry->metadata[1 + info->pv_num * sizeof(uint16_t)] =
-	    info->def_num;
+		info->def_num;
 	memcpy(attr_entry->metadata + 1 /* sizeof(pv num) */ +
-		   info->pv_num * sizeof(uint16_t) + 1 /* sizeof(def num)*/,
+		       info->pv_num * sizeof(uint16_t) + 1 /* sizeof(def num)*/,
 	       info->def_index, info->def_num);
 }
 
 int pldm_bios_table_attr_entry_enum_encode_check(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_enum_info *info)
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_enum_info *info)
 {
 	POINTER_CHECK(entry);
 	POINTER_CHECK(info);
 	size_t length = pldm_bios_table_attr_entry_enum_encode_length(
-	    info->pv_num, info->def_num);
+		info->pv_num, info->def_num);
 	BUFFER_SIZE_EXPECT(entry_length, length);
 	pldm_bios_table_attr_entry_enum_encode(entry, entry_length, info);
 	return PLDM_SUCCESS;
@@ -211,13 +213,13 @@
 	} while (0)
 
 uint8_t pldm_bios_table_attr_entry_enum_decode_pv_num(
-    const struct pldm_bios_attr_table_entry *entry)
+	const struct pldm_bios_attr_table_entry *entry)
 {
 	return entry->metadata[0];
 }
 
 int pldm_bios_table_attr_entry_enum_decode_pv_num_check(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *pv_num)
+	const struct pldm_bios_attr_table_entry *entry, uint8_t *pv_num)
 {
 	POINTER_CHECK(entry);
 	POINTER_CHECK(pv_num);
@@ -227,7 +229,7 @@
 }
 
 uint8_t pldm_bios_table_attr_entry_enum_decode_def_num(
-    const struct pldm_bios_attr_table_entry *entry)
+	const struct pldm_bios_attr_table_entry *entry)
 {
 	uint8_t pv_num = pldm_bios_table_attr_entry_enum_decode_pv_num(entry);
 	return entry->metadata[sizeof(uint8_t) /* pv_num */ +
@@ -235,7 +237,7 @@
 }
 
 int pldm_bios_table_attr_entry_enum_decode_def_num_check(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *def_num)
+	const struct pldm_bios_attr_table_entry *entry, uint8_t *def_num)
 {
 	POINTER_CHECK(entry);
 	POINTER_CHECK(def_num);
@@ -245,8 +247,8 @@
 }
 
 uint8_t pldm_bios_table_attr_entry_enum_decode_pv_hdls(
-    const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
-    uint8_t pv_num)
+	const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
+	uint8_t pv_num)
 {
 	uint8_t num = pldm_bios_table_attr_entry_enum_decode_pv_num(entry);
 	num = num < pv_num ? num : pv_num;
@@ -260,8 +262,8 @@
 }
 
 int pldm_bios_table_attr_entry_enum_decode_pv_hdls_check(
-    const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
-    uint8_t pv_num)
+	const struct pldm_bios_attr_table_entry *entry, uint16_t *pv_hdls,
+	uint8_t pv_num)
 {
 	POINTER_CHECK(entry);
 	POINTER_CHECK(pv_hdls);
@@ -275,8 +277,8 @@
 }
 
 uint8_t pldm_bios_table_attr_entry_enum_decode_def_indices(
-    const struct pldm_bios_attr_table_entry *entry, uint8_t *def_indices,
-    uint8_t def_num)
+	const struct pldm_bios_attr_table_entry *entry, uint8_t *def_indices,
+	uint8_t def_num)
 {
 	uint8_t num = pldm_bios_table_attr_entry_enum_decode_def_num(entry);
 	num = num < def_num ? num : def_num;
@@ -316,19 +318,19 @@
 }
 
 void pldm_bios_table_attr_entry_string_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_string_info *info)
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_string_info *info)
 {
-	size_t length =
-	    pldm_bios_table_attr_entry_string_encode_length(info->def_length);
+	size_t length = pldm_bios_table_attr_entry_string_encode_length(
+		info->def_length);
 	assert(length <= entry_length);
-	uint8_t attr_type =
-	    info->read_only ? PLDM_BIOS_STRING_READ_ONLY : PLDM_BIOS_STRING;
+	uint8_t attr_type = info->read_only ? PLDM_BIOS_STRING_READ_ONLY :
+					      PLDM_BIOS_STRING;
 	attr_table_entry_encode_header(entry, entry_length, attr_type,
 				       info->name_handle);
 	struct pldm_bios_attr_table_entry *attr_entry = entry;
 	struct attr_table_string_entry_fields *attr_fields =
-	    (struct attr_table_string_entry_fields *)attr_entry->metadata;
+		(struct attr_table_string_entry_fields *)attr_entry->metadata;
 	attr_fields->string_type = info->string_type;
 	attr_fields->min_length = htole16(info->min_length);
 	attr_fields->max_length = htole16(info->max_length);
@@ -339,12 +341,12 @@
 	}
 }
 
-#define PLDM_STRING_TYPE_MAX 5
+#define PLDM_STRING_TYPE_MAX	5
 #define PLDM_STRING_TYPE_VENDOR 0xff
 
 int pldm_bios_table_attr_entry_string_info_check(
-    const struct pldm_bios_table_attr_entry_string_info *info,
-    const char **errmsg)
+	const struct pldm_bios_table_attr_entry_string_info *info,
+	const char **errmsg)
 {
 	if (info->min_length > info->max_length) {
 		set_errmsg(errmsg, "MinimumStingLength should not be greater "
@@ -376,13 +378,13 @@
 }
 
 int pldm_bios_table_attr_entry_string_encode_check(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_string_info *info)
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_string_info *info)
 {
 	POINTER_CHECK(entry);
 	POINTER_CHECK(info);
-	size_t length =
-	    pldm_bios_table_attr_entry_string_encode_length(info->def_length);
+	size_t length = pldm_bios_table_attr_entry_string_encode_length(
+		info->def_length);
 	BUFFER_SIZE_EXPECT(entry_length, length);
 	if (pldm_bios_table_attr_entry_string_info_check(info, NULL) !=
 	    PLDM_SUCCESS) {
@@ -393,56 +395,60 @@
 }
 
 uint16_t pldm_bios_table_attr_entry_string_decode_def_string_length(
-    const struct pldm_bios_attr_table_entry *entry)
+	const struct pldm_bios_attr_table_entry *entry)
 {
 	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
+		(struct attr_table_string_entry_fields *)entry->metadata;
 	return le16toh(fields->def_length);
 }
 
 int pldm_bios_table_attr_entry_string_decode_def_string_length_check(
-    const struct pldm_bios_attr_table_entry *entry, uint16_t *def_string_length)
+	const struct pldm_bios_attr_table_entry *entry,
+	uint16_t *def_string_length)
 {
 	POINTER_CHECK(entry);
 	POINTER_CHECK(def_string_length);
 	ATTR_TYPE_EXPECT(entry->attr_type, PLDM_BIOS_STRING);
 	*def_string_length =
-	    pldm_bios_table_attr_entry_string_decode_def_string_length(entry);
+		pldm_bios_table_attr_entry_string_decode_def_string_length(
+			entry);
 	return PLDM_SUCCESS;
 }
 
 uint8_t pldm_bios_table_attr_entry_string_decode_string_type(
-    const struct pldm_bios_attr_table_entry *entry)
+	const struct pldm_bios_attr_table_entry *entry)
 {
 	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
+		(struct attr_table_string_entry_fields *)entry->metadata;
 	return fields->string_type;
 }
 
 uint16_t pldm_bios_table_attr_entry_string_decode_max_length(
-    const struct pldm_bios_attr_table_entry *entry)
+	const struct pldm_bios_attr_table_entry *entry)
 {
 	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
+		(struct attr_table_string_entry_fields *)entry->metadata;
 	return le16toh(fields->max_length);
 }
 
 uint16_t pldm_bios_table_attr_entry_string_decode_min_length(
-    const struct pldm_bios_attr_table_entry *entry)
+	const struct pldm_bios_attr_table_entry *entry)
 {
 	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
+		(struct attr_table_string_entry_fields *)entry->metadata;
 	return le16toh(fields->min_length);
 }
 
 uint16_t pldm_bios_table_attr_entry_string_decode_def_string(
-    const struct pldm_bios_attr_table_entry *entry, char *buffer, size_t size)
+	const struct pldm_bios_attr_table_entry *entry, char *buffer,
+	size_t size)
 {
 	uint16_t length =
-	    pldm_bios_table_attr_entry_string_decode_def_string_length(entry);
+		pldm_bios_table_attr_entry_string_decode_def_string_length(
+			entry);
 	length = length < (size - 1) ? length : (size - 1);
 	struct attr_table_string_entry_fields *fields =
-	    (struct attr_table_string_entry_fields *)entry->metadata;
+		(struct attr_table_string_entry_fields *)entry->metadata;
 	memcpy(buffer, fields->def_string, length);
 	buffer[length] = 0;
 	return length;
@@ -453,7 +459,8 @@
 static size_t attr_table_entry_length_string(const void *entry)
 {
 	uint16_t def_str_len =
-	    pldm_bios_table_attr_entry_string_decode_def_string_length(entry);
+		pldm_bios_table_attr_entry_string_decode_def_string_length(
+			entry);
 	return pldm_bios_table_attr_entry_string_encode_length(def_str_len);
 }
 
@@ -471,18 +478,18 @@
 }
 
 void pldm_bios_table_attr_entry_integer_encode(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_integer_info *info)
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_integer_info *info)
 {
 	size_t length = pldm_bios_table_attr_entry_integer_encode_length();
 	assert(length <= entry_length);
-	uint8_t attr_type =
-	    info->read_only ? PLDM_BIOS_INTEGER_READ_ONLY : PLDM_BIOS_INTEGER;
+	uint8_t attr_type = info->read_only ? PLDM_BIOS_INTEGER_READ_ONLY :
+					      PLDM_BIOS_INTEGER;
 	attr_table_entry_encode_header(entry, entry_length, attr_type,
 				       info->name_handle);
 	struct pldm_bios_attr_table_entry *attr_entry = entry;
 	struct attr_table_integer_entry_fields *attr_fields =
-	    (struct attr_table_integer_entry_fields *)attr_entry->metadata;
+		(struct attr_table_integer_entry_fields *)attr_entry->metadata;
 	attr_fields->lower_bound = htole64(info->lower_bound);
 	attr_fields->upper_bound = htole64(info->upper_bound);
 	attr_fields->scalar_increment = htole32(info->scalar_increment);
@@ -490,8 +497,8 @@
 }
 
 int pldm_bios_table_attr_entry_integer_info_check(
-    const struct pldm_bios_table_attr_entry_integer_info *info,
-    const char **errmsg)
+	const struct pldm_bios_table_attr_entry_integer_info *info,
+	const char **errmsg)
 {
 	if (info->lower_bound == info->upper_bound) {
 		if (info->default_value != info->lower_bound) {
@@ -520,7 +527,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 	if ((info->default_value - info->lower_bound) %
-		info->scalar_increment !=
+		    info->scalar_increment !=
 	    0) {
 		set_errmsg(errmsg, "Wrong DefaultValue or ScalarIncrement");
 		return PLDM_ERROR_INVALID_DATA;
@@ -529,8 +536,8 @@
 }
 
 int pldm_bios_table_attr_entry_integer_encode_check(
-    void *entry, size_t entry_length,
-    const struct pldm_bios_table_attr_entry_integer_info *info)
+	void *entry, size_t entry_length,
+	const struct pldm_bios_table_attr_entry_integer_info *info)
 {
 	POINTER_CHECK(entry);
 	POINTER_CHECK(info);
@@ -545,11 +552,11 @@
 }
 
 void pldm_bios_table_attr_entry_integer_decode(
-    const struct pldm_bios_attr_table_entry *entry, uint64_t *lower,
-    uint64_t *upper, uint32_t *scalar, uint64_t *def)
+	const struct pldm_bios_attr_table_entry *entry, uint64_t *lower,
+	uint64_t *upper, uint32_t *scalar, uint64_t *def)
 {
 	struct attr_table_integer_entry_fields *fields =
-	    (struct attr_table_integer_entry_fields *)entry->metadata;
+		(struct attr_table_integer_entry_fields *)entry->metadata;
 	*lower = le64toh(fields->lower_bound);
 	*upper = le64toh(fields->upper_bound);
 	*scalar = le32toh(fields->scalar_increment);
@@ -569,8 +576,10 @@
 
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 
-static const struct table_entry_length *find_table_entry_length_by_type(
-    uint8_t attr_type, const struct table_entry_length *handlers, size_t count)
+static const struct table_entry_length *
+find_table_entry_length_by_type(uint8_t attr_type,
+				const struct table_entry_length *handlers,
+				size_t count)
 {
 	size_t i;
 	for (i = 0; i < count; i++) {
@@ -582,27 +591,27 @@
 }
 
 static const struct table_entry_length attr_table_entries[] = {
-    {.attr_type = PLDM_BIOS_ENUMERATION,
-     .entry_length_handler = attr_table_entry_length_enum},
-    {.attr_type = PLDM_BIOS_ENUMERATION_READ_ONLY,
-     .entry_length_handler = attr_table_entry_length_enum},
-    {.attr_type = PLDM_BIOS_STRING,
-     .entry_length_handler = attr_table_entry_length_string},
-    {.attr_type = PLDM_BIOS_STRING_READ_ONLY,
-     .entry_length_handler = attr_table_entry_length_string},
-    {.attr_type = PLDM_BIOS_INTEGER,
-     .entry_length_handler = attr_table_entry_length_integer},
-    {.attr_type = PLDM_BIOS_INTEGER_READ_ONLY,
-     .entry_length_handler = attr_table_entry_length_integer},
+	{ .attr_type = PLDM_BIOS_ENUMERATION,
+	  .entry_length_handler = attr_table_entry_length_enum },
+	{ .attr_type = PLDM_BIOS_ENUMERATION_READ_ONLY,
+	  .entry_length_handler = attr_table_entry_length_enum },
+	{ .attr_type = PLDM_BIOS_STRING,
+	  .entry_length_handler = attr_table_entry_length_string },
+	{ .attr_type = PLDM_BIOS_STRING_READ_ONLY,
+	  .entry_length_handler = attr_table_entry_length_string },
+	{ .attr_type = PLDM_BIOS_INTEGER,
+	  .entry_length_handler = attr_table_entry_length_integer },
+	{ .attr_type = PLDM_BIOS_INTEGER_READ_ONLY,
+	  .entry_length_handler = attr_table_entry_length_integer },
 };
 
 static size_t attr_table_entry_length(const void *table_entry)
 {
 	const struct pldm_bios_attr_table_entry *entry = table_entry;
 	const struct table_entry_length *attr_table_entry =
-	    find_table_entry_length_by_type(entry->attr_type,
-					    attr_table_entries,
-					    ARRAY_SIZE(attr_table_entries));
+		find_table_entry_length_by_type(entry->attr_type,
+						attr_table_entries,
+						ARRAY_SIZE(attr_table_entries));
 	assert(attr_table_entry != NULL);
 	assert(attr_table_entry->entry_length_handler != NULL);
 
@@ -610,13 +619,13 @@
 }
 
 uint16_t pldm_bios_table_attr_value_entry_decode_attribute_handle(
-    const struct pldm_bios_attr_val_table_entry *entry)
+	const struct pldm_bios_attr_val_table_entry *entry)
 {
 	return le16toh(entry->attr_handle);
 }
 
 uint8_t pldm_bios_table_attr_value_entry_decode_attribute_type(
-    const struct pldm_bios_attr_val_table_entry *entry)
+	const struct pldm_bios_attr_val_table_entry *entry)
 {
 	return entry->attr_type;
 }
@@ -628,11 +637,11 @@
 }
 
 void pldm_bios_table_attr_value_entry_encode_enum(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint8_t count, const uint8_t *handles)
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint8_t count, const uint8_t *handles)
 {
 	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_enum_length(count);
+		pldm_bios_table_attr_value_entry_encode_enum_length(count);
 	assert(length <= entry_length);
 
 	struct pldm_bios_attr_val_table_entry *table_entry = entry;
@@ -645,17 +654,17 @@
 }
 
 uint8_t pldm_bios_table_attr_value_entry_enum_decode_number(
-    const struct pldm_bios_attr_val_table_entry *entry)
+	const struct pldm_bios_attr_val_table_entry *entry)
 {
 	return entry->value[0];
 }
 
 uint8_t pldm_bios_table_attr_value_entry_enum_decode_handles(
-    const struct pldm_bios_attr_val_table_entry *entry, uint8_t *handles,
-    uint8_t number)
+	const struct pldm_bios_attr_val_table_entry *entry, uint8_t *handles,
+	uint8_t number)
 {
 	uint8_t curr_num =
-	    pldm_bios_table_attr_value_entry_enum_decode_number(entry);
+		pldm_bios_table_attr_value_entry_enum_decode_number(entry);
 	number = number < curr_num ? number : curr_num;
 	memcpy(handles, &entry->value[1], number);
 
@@ -663,8 +672,8 @@
 }
 
 int pldm_bios_table_attr_value_entry_encode_enum_check(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint8_t count, uint8_t *handles)
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint8_t count, uint8_t *handles)
 {
 	POINTER_CHECK(entry);
 	if (count != 0 && handles == NULL) {
@@ -672,17 +681,17 @@
 	}
 	ATTR_TYPE_EXPECT(attr_type, PLDM_BIOS_ENUMERATION);
 	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_enum_length(count);
+		pldm_bios_table_attr_value_entry_encode_enum_length(count);
 	BUFFER_SIZE_EXPECT(entry_length, length);
 	pldm_bios_table_attr_value_entry_encode_enum(
-	    entry, entry_length, attr_handle, attr_type, count, handles);
+		entry, entry_length, attr_handle, attr_type, count, handles);
 	return PLDM_SUCCESS;
 }
 
 static size_t attr_value_table_entry_length_enum(const void *entry)
 {
 	uint8_t number =
-	    pldm_bios_table_attr_value_entry_enum_decode_number(entry);
+		pldm_bios_table_attr_value_entry_enum_decode_number(entry);
 	return pldm_bios_table_attr_value_entry_encode_enum_length(number);
 }
 
@@ -694,11 +703,11 @@
 }
 
 void pldm_bios_table_attr_value_entry_encode_string(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint16_t str_length, const char *str)
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint16_t str_length, const char *str)
 {
-	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_string_length(str_length);
+	size_t length = pldm_bios_table_attr_value_entry_encode_string_length(
+		str_length);
 	assert(length <= entry_length);
 
 	struct pldm_bios_attr_val_table_entry *table_entry = entry;
@@ -713,7 +722,7 @@
 }
 
 uint16_t pldm_bios_table_attr_value_entry_string_decode_length(
-    const struct pldm_bios_attr_val_table_entry *entry)
+	const struct pldm_bios_attr_val_table_entry *entry)
 {
 	uint16_t str_length = 0;
 	memcpy(&str_length, entry->value, sizeof(str_length));
@@ -721,38 +730,38 @@
 }
 
 void pldm_bios_table_attr_value_entry_string_decode_string(
-    const struct pldm_bios_attr_val_table_entry *entry,
-    struct variable_field *current_string)
+	const struct pldm_bios_attr_val_table_entry *entry,
+	struct variable_field *current_string)
 {
 	current_string->length =
-	    pldm_bios_table_attr_value_entry_string_decode_length(entry);
+		pldm_bios_table_attr_value_entry_string_decode_length(entry);
 	current_string->ptr =
-	    entry->value + sizeof(uint16_t); // sizeof(CurrentStringLength)
+		entry->value + sizeof(uint16_t); // sizeof(CurrentStringLength)
 }
 
 int pldm_bios_table_attr_value_entry_encode_string_check(
-    void *entry, size_t entry_length, uint16_t attr_handle, uint8_t attr_type,
-    uint16_t str_length, const char *str)
+	void *entry, size_t entry_length, uint16_t attr_handle,
+	uint8_t attr_type, uint16_t str_length, const char *str)
 {
 	POINTER_CHECK(entry);
 	if (str_length != 0 && str == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 	ATTR_TYPE_EXPECT(attr_type, PLDM_BIOS_STRING);
-	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_string_length(str_length);
+	size_t length = pldm_bios_table_attr_value_entry_encode_string_length(
+		str_length);
 	BUFFER_SIZE_EXPECT(entry_length, length);
 	pldm_bios_table_attr_value_entry_encode_string(
-	    entry, entry_length, attr_handle, attr_type, str_length, str);
+		entry, entry_length, attr_handle, attr_type, str_length, str);
 	return PLDM_SUCCESS;
 }
 
 static size_t attr_value_table_entry_length_string(const void *entry)
 {
 	uint16_t str_length =
-	    pldm_bios_table_attr_value_entry_string_decode_length(entry);
+		pldm_bios_table_attr_value_entry_string_decode_length(entry);
 	return pldm_bios_table_attr_value_entry_encode_string_length(
-	    str_length);
+		str_length);
 }
 
 size_t pldm_bios_table_attr_value_entry_encode_integer_length(void)
@@ -767,7 +776,7 @@
 						     uint64_t cv)
 {
 	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_integer_length();
+		pldm_bios_table_attr_value_entry_encode_integer_length();
 	assert(length <= entry_length);
 
 	struct pldm_bios_attr_val_table_entry *table_entry = entry;
@@ -785,16 +794,16 @@
 {
 	POINTER_CHECK(entry);
 	size_t length =
-	    pldm_bios_table_attr_value_entry_encode_integer_length();
+		pldm_bios_table_attr_value_entry_encode_integer_length();
 	ATTR_TYPE_EXPECT(attr_type, PLDM_BIOS_INTEGER);
 	BUFFER_SIZE_EXPECT(entry_length, length);
 	pldm_bios_table_attr_value_entry_encode_integer(
-	    entry, entry_length, attr_handle, attr_type, cv);
+		entry, entry_length, attr_handle, attr_type, cv);
 	return PLDM_SUCCESS;
 }
 
 uint64_t pldm_bios_table_attr_value_entry_integer_decode_cv(
-    const struct pldm_bios_attr_val_table_entry *entry)
+	const struct pldm_bios_attr_val_table_entry *entry)
 {
 	uint64_t cv = 0;
 	memcpy(&cv, entry->value, sizeof(cv));
@@ -809,27 +818,27 @@
 }
 
 static const struct table_entry_length attr_value_table_entries[] = {
-    {.attr_type = PLDM_BIOS_ENUMERATION,
-     .entry_length_handler = attr_value_table_entry_length_enum},
-    {.attr_type = PLDM_BIOS_ENUMERATION_READ_ONLY,
-     .entry_length_handler = attr_value_table_entry_length_enum},
-    {.attr_type = PLDM_BIOS_STRING,
-     .entry_length_handler = attr_value_table_entry_length_string},
-    {.attr_type = PLDM_BIOS_STRING_READ_ONLY,
-     .entry_length_handler = attr_value_table_entry_length_string},
-    {.attr_type = PLDM_BIOS_INTEGER,
-     .entry_length_handler = attr_value_table_entry_length_integer},
-    {.attr_type = PLDM_BIOS_INTEGER_READ_ONLY,
-     .entry_length_handler = attr_value_table_entry_length_integer},
+	{ .attr_type = PLDM_BIOS_ENUMERATION,
+	  .entry_length_handler = attr_value_table_entry_length_enum },
+	{ .attr_type = PLDM_BIOS_ENUMERATION_READ_ONLY,
+	  .entry_length_handler = attr_value_table_entry_length_enum },
+	{ .attr_type = PLDM_BIOS_STRING,
+	  .entry_length_handler = attr_value_table_entry_length_string },
+	{ .attr_type = PLDM_BIOS_STRING_READ_ONLY,
+	  .entry_length_handler = attr_value_table_entry_length_string },
+	{ .attr_type = PLDM_BIOS_INTEGER,
+	  .entry_length_handler = attr_value_table_entry_length_integer },
+	{ .attr_type = PLDM_BIOS_INTEGER_READ_ONLY,
+	  .entry_length_handler = attr_value_table_entry_length_integer },
 };
 
 static size_t attr_value_table_entry_length(const void *table_entry)
 {
 	const struct pldm_bios_attr_val_table_entry *entry = table_entry;
 	const struct table_entry_length *entry_length =
-	    find_table_entry_length_by_type(
-		entry->attr_type, attr_value_table_entries,
-		ARRAY_SIZE(attr_value_table_entries));
+		find_table_entry_length_by_type(
+			entry->attr_type, attr_value_table_entries,
+			ARRAY_SIZE(attr_value_table_entries));
 	assert(entry_length != NULL);
 	assert(entry_length->entry_length_handler != NULL);
 
@@ -837,13 +846,13 @@
 }
 
 size_t pldm_bios_table_attr_value_entry_length(
-    const struct pldm_bios_attr_val_table_entry *entry)
+	const struct pldm_bios_attr_val_table_entry *entry)
 {
 	return attr_value_table_entry_length(entry);
 }
 
 uint16_t pldm_bios_table_attr_value_entry_decode_handle(
-    const struct pldm_bios_attr_val_table_entry *entry)
+	const struct pldm_bios_attr_val_table_entry *entry)
 {
 	return le16toh(entry->attr_handle);
 }
@@ -880,9 +889,8 @@
 size_t pldm_bios_table_append_pad_checksum(void *table, size_t size,
 					   size_t size_without_pad)
 {
-
 	size_t pad_checksum_size =
-	    pldm_bios_table_pad_checksum_size(size_without_pad);
+		pldm_bios_table_pad_checksum_size(size_without_pad);
 	size_t total_length = size_without_pad + pad_checksum_size;
 	assert(size >= total_length);
 
@@ -979,9 +987,9 @@
 				      equal_handler equal, const void *key)
 {
 	struct pldm_bios_table_iter *iter =
-	    pldm_bios_table_iter_create(table, length, type);
+		pldm_bios_table_iter_create(table, length, type);
 	const void *entry =
-	    pldm_bios_table_entry_find_by_iter(iter, key, equal);
+		pldm_bios_table_entry_find_by_iter(iter, key, equal);
 	pldm_bios_table_iter_free(iter);
 	return entry;
 }
@@ -1001,9 +1009,10 @@
 pldm_bios_table_string_find_by_handle(const void *table, size_t length,
 				      uint16_t handle)
 {
-	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_STRING_TABLE, string_table_handle_equal,
-	    &handle);
+	return pldm_bios_table_entry_find_from_table(table, length,
+						     PLDM_BIOS_STRING_TABLE,
+						     string_table_handle_equal,
+						     &handle);
 }
 
 struct string_equal_arg {
@@ -1030,10 +1039,11 @@
 				      const char *str)
 {
 	uint16_t str_length = strlen(str);
-	struct string_equal_arg arg = {str_length, str};
-	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_STRING_TABLE, string_table_string_equal,
-	    &arg);
+	struct string_equal_arg arg = { str_length, str };
+	return pldm_bios_table_entry_find_from_table(table, length,
+						     PLDM_BIOS_STRING_TABLE,
+						     string_table_string_equal,
+						     &arg);
 }
 
 static bool attr_table_handle_equal(const void *entry, const void *key)
@@ -1047,9 +1057,10 @@
 pldm_bios_table_attr_find_by_handle(const void *table, size_t length,
 				    uint16_t handle)
 {
-	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_ATTR_TABLE, attr_table_handle_equal,
-	    &handle);
+	return pldm_bios_table_entry_find_from_table(table, length,
+						     PLDM_BIOS_ATTR_TABLE,
+						     attr_table_handle_equal,
+						     &handle);
 }
 
 static bool attr_table_string_handle_equal(const void *entry, const void *key)
@@ -1063,8 +1074,8 @@
 					   uint16_t handle)
 {
 	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_ATTR_TABLE, attr_table_string_handle_equal,
-	    &handle);
+		table, length, PLDM_BIOS_ATTR_TABLE,
+		attr_table_string_handle_equal, &handle);
 }
 
 static bool attr_value_table_handle_equal(const void *entry, const void *key)
@@ -1078,16 +1089,16 @@
 					  uint16_t handle)
 {
 	return pldm_bios_table_entry_find_from_table(
-	    table, length, PLDM_BIOS_ATTR_VAL_TABLE,
-	    attr_value_table_handle_equal, &handle);
+		table, length, PLDM_BIOS_ATTR_VAL_TABLE,
+		attr_value_table_handle_equal, &handle);
 }
 
 int pldm_bios_table_attr_value_copy_and_update(
-    const void *src_table, size_t src_length, void *dest_table,
-    size_t *dest_length, const void *entry, size_t entry_length)
+	const void *src_table, size_t src_length, void *dest_table,
+	size_t *dest_length, const void *entry, size_t entry_length)
 {
 	struct pldm_bios_table_iter *iter = pldm_bios_table_iter_create(
-	    src_table, src_length, PLDM_BIOS_ATTR_VAL_TABLE);
+		src_table, src_length, PLDM_BIOS_ATTR_VAL_TABLE);
 
 	int rc = PLDM_SUCCESS;
 	const struct pldm_bios_attr_val_table_entry *tmp;
@@ -1120,14 +1131,14 @@
 	}
 
 	size_t pad_checksum_size =
-	    pldm_bios_table_pad_checksum_size(copied_length);
+		pldm_bios_table_pad_checksum_size(copied_length);
 	if ((pad_checksum_size + copied_length) > buffer_length) {
 		rc = PLDM_ERROR_INVALID_LENGTH;
 		goto out;
 	}
 
 	*dest_length = pldm_bios_table_append_pad_checksum(
-	    dest_table, buffer_length, copied_length);
+		dest_table, buffer_length, copied_length);
 out:
 	pldm_bios_table_iter_free(iter);
 	return rc;
diff --git a/src/firmware_update.c b/src/firmware_update.c
index c5a213f..91fbb33 100644
--- a/src/firmware_update.c
+++ b/src/firmware_update.c
@@ -33,7 +33,6 @@
 static uint16_t get_descriptor_type_length(uint16_t descriptor_type)
 {
 	switch (descriptor_type) {
-
 	case PLDM_FWUP_PCI_VENDOR_ID:
 		return PLDM_FWUP_PCI_VENDOR_ID_LENGTH;
 	case PLDM_FWUP_IANA_ENTERPRISE_ID:
@@ -112,9 +111,9 @@
 
 	default:
 		if (comp_resp_code >=
-			PLDM_CRC_VENDOR_COMP_RESP_CODE_RANGE_MIN &&
+			    PLDM_CRC_VENDOR_COMP_RESP_CODE_RANGE_MIN &&
 		    comp_resp_code <=
-			PLDM_CRC_VENDOR_COMP_RESP_CODE_RANGE_MAX) {
+			    PLDM_CRC_VENDOR_COMP_RESP_CODE_RANGE_MAX) {
 			return true;
 		}
 		return false;
@@ -161,9 +160,9 @@
 
 	default:
 		if (comp_compatibility_resp_code >=
-			PLDM_CCRC_VENDOR_COMP_RESP_CODE_RANGE_MIN &&
+			    PLDM_CCRC_VENDOR_COMP_RESP_CODE_RANGE_MIN &&
 		    comp_compatibility_resp_code <=
-			PLDM_CCRC_VENDOR_COMP_RESP_CODE_RANGE_MAX) {
+			    PLDM_CCRC_VENDOR_COMP_RESP_CODE_RANGE_MAX) {
 			return true;
 		}
 		return false;
@@ -260,7 +259,6 @@
  */
 static bool is_reason_code_valid(uint8_t reason_code)
 {
-
 	switch (reason_code) {
 	case PLDM_FD_INITIALIZATION:
 	case PLDM_FD_ACTIVATE_FW:
@@ -286,7 +284,7 @@
  *  @return true if non functioning component indication is valid, false if not
  */
 static bool is_non_functioning_component_indication_valid(
-    bool8_t non_functioning_component_indication)
+	bool8_t non_functioning_component_indication)
 {
 	switch (non_functioning_component_indication) {
 	case PLDM_FWUP_COMPONENTS_FUNCTIONING:
@@ -299,9 +297,9 @@
 }
 
 int decode_pldm_package_header_info(
-    const uint8_t *data, size_t length,
-    struct pldm_package_header_information *package_header_info,
-    struct variable_field *package_version_str)
+	const uint8_t *data, size_t length,
+	struct pldm_package_header_information *package_header_info,
+	struct variable_field *package_version_str)
 {
 	if (data == NULL || package_header_info == NULL ||
 	    package_version_str == NULL) {
@@ -313,7 +311,7 @@
 	}
 
 	struct pldm_package_header_information *data_header =
-	    (struct pldm_package_header_information *)(data);
+		(struct pldm_package_header_information *)(data);
 
 	if (!is_string_type_valid(data_header->package_version_string_type) ||
 	    (data_header->package_version_string_length == 0)) {
@@ -321,7 +319,7 @@
 	}
 
 	if (length < sizeof(struct pldm_package_header_information) +
-			 data_header->package_version_string_length) {
+			     data_header->package_version_string_length) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
@@ -333,33 +331,34 @@
 	memcpy(package_header_info->uuid, data_header->uuid,
 	       sizeof(data_header->uuid));
 	package_header_info->package_header_format_version =
-	    data_header->package_header_format_version;
+		data_header->package_header_format_version;
 	package_header_info->package_header_size =
-	    le16toh(data_header->package_header_size);
+		le16toh(data_header->package_header_size);
 	memcpy(package_header_info->package_release_date_time,
 	       data_header->package_release_date_time,
 	       sizeof(data_header->package_release_date_time));
 	package_header_info->component_bitmap_bit_length =
-	    le16toh(data_header->component_bitmap_bit_length);
+		le16toh(data_header->component_bitmap_bit_length);
 	package_header_info->package_version_string_type =
-	    data_header->package_version_string_type;
+		data_header->package_version_string_type;
 	package_header_info->package_version_string_length =
-	    data_header->package_version_string_length;
+		data_header->package_version_string_length;
 	package_version_str->ptr =
-	    data + sizeof(struct pldm_package_header_information);
+		data + sizeof(struct pldm_package_header_information);
 	package_version_str->length =
-	    package_header_info->package_version_string_length;
+		package_header_info->package_version_string_length;
 
 	return PLDM_SUCCESS;
 }
 
 int decode_firmware_device_id_record(
-    const uint8_t *data, size_t length, uint16_t component_bitmap_bit_length,
-    struct pldm_firmware_device_id_record *fw_device_id_record,
-    struct variable_field *applicable_components,
-    struct variable_field *comp_image_set_version_str,
-    struct variable_field *record_descriptors,
-    struct variable_field *fw_device_pkg_data)
+	const uint8_t *data, size_t length,
+	uint16_t component_bitmap_bit_length,
+	struct pldm_firmware_device_id_record *fw_device_id_record,
+	struct variable_field *applicable_components,
+	struct variable_field *comp_image_set_version_str,
+	struct variable_field *record_descriptors,
+	struct variable_field *fw_device_pkg_data)
 {
 	if (data == NULL || fw_device_id_record == NULL ||
 	    applicable_components == NULL ||
@@ -378,66 +377,67 @@
 	}
 
 	struct pldm_firmware_device_id_record *data_record =
-	    (struct pldm_firmware_device_id_record *)(data);
+		(struct pldm_firmware_device_id_record *)(data);
 
 	if (!is_string_type_valid(
-		data_record->comp_image_set_version_string_type) ||
+		    data_record->comp_image_set_version_string_type) ||
 	    (data_record->comp_image_set_version_string_length == 0)) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
 	fw_device_id_record->record_length =
-	    le16toh(data_record->record_length);
+		le16toh(data_record->record_length);
 	fw_device_id_record->descriptor_count = data_record->descriptor_count;
 	fw_device_id_record->device_update_option_flags.value =
-	    le32toh(data_record->device_update_option_flags.value);
+		le32toh(data_record->device_update_option_flags.value);
 	fw_device_id_record->comp_image_set_version_string_type =
-	    data_record->comp_image_set_version_string_type;
+		data_record->comp_image_set_version_string_type;
 	fw_device_id_record->comp_image_set_version_string_length =
-	    data_record->comp_image_set_version_string_length;
+		data_record->comp_image_set_version_string_length;
 	fw_device_id_record->fw_device_pkg_data_length =
-	    le16toh(data_record->fw_device_pkg_data_length);
+		le16toh(data_record->fw_device_pkg_data_length);
 
 	if (length < fw_device_id_record->record_length) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
 	uint16_t applicable_components_length =
-	    component_bitmap_bit_length / PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE;
+		component_bitmap_bit_length /
+		PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE;
 	uint16_t calc_min_record_length =
-	    sizeof(struct pldm_firmware_device_id_record) +
-	    applicable_components_length +
-	    data_record->comp_image_set_version_string_length +
-	    PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN +
-	    fw_device_id_record->fw_device_pkg_data_length;
+		sizeof(struct pldm_firmware_device_id_record) +
+		applicable_components_length +
+		data_record->comp_image_set_version_string_length +
+		PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN +
+		fw_device_id_record->fw_device_pkg_data_length;
 
 	if (fw_device_id_record->record_length < calc_min_record_length) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
 	applicable_components->ptr =
-	    data + sizeof(struct pldm_firmware_device_id_record);
+		data + sizeof(struct pldm_firmware_device_id_record);
 	applicable_components->length = applicable_components_length;
 
 	comp_image_set_version_str->ptr =
-	    applicable_components->ptr + applicable_components->length;
+		applicable_components->ptr + applicable_components->length;
 	comp_image_set_version_str->length =
-	    fw_device_id_record->comp_image_set_version_string_length;
+		fw_device_id_record->comp_image_set_version_string_length;
 
 	record_descriptors->ptr = comp_image_set_version_str->ptr +
 				  comp_image_set_version_str->length;
 	record_descriptors->length =
-	    fw_device_id_record->record_length -
-	    sizeof(struct pldm_firmware_device_id_record) -
-	    applicable_components_length -
-	    fw_device_id_record->comp_image_set_version_string_length -
-	    fw_device_id_record->fw_device_pkg_data_length;
+		fw_device_id_record->record_length -
+		sizeof(struct pldm_firmware_device_id_record) -
+		applicable_components_length -
+		fw_device_id_record->comp_image_set_version_string_length -
+		fw_device_id_record->fw_device_pkg_data_length;
 
 	if (fw_device_id_record->fw_device_pkg_data_length) {
 		fw_device_pkg_data->ptr =
-		    record_descriptors->ptr + record_descriptors->length;
+			record_descriptors->ptr + record_descriptors->length;
 		fw_device_pkg_data->length =
-		    fw_device_id_record->fw_device_pkg_data_length;
+			fw_device_id_record->fw_device_pkg_data_length;
 	}
 
 	return PLDM_SUCCESS;
@@ -459,7 +459,7 @@
 	}
 
 	struct pldm_descriptor_tlv *entry =
-	    (struct pldm_descriptor_tlv *)(data);
+		(struct pldm_descriptor_tlv *)(data);
 
 	*descriptor_type = le16toh(entry->descriptor_type);
 	descriptor_length = le16toh(entry->descriptor_length);
@@ -482,9 +482,9 @@
 }
 
 int decode_vendor_defined_descriptor_value(
-    const uint8_t *data, size_t length, uint8_t *descriptor_title_str_type,
-    struct variable_field *descriptor_title_str,
-    struct variable_field *descriptor_data)
+	const uint8_t *data, size_t length, uint8_t *descriptor_title_str_type,
+	struct variable_field *descriptor_title_str,
+	struct variable_field *descriptor_data)
 {
 	if (data == NULL || descriptor_title_str_type == NULL ||
 	    descriptor_title_str == NULL || descriptor_data == NULL) {
@@ -496,9 +496,9 @@
 	}
 
 	struct pldm_vendor_defined_descriptor_title_data *entry =
-	    (struct pldm_vendor_defined_descriptor_title_data *)(data);
+		(struct pldm_vendor_defined_descriptor_title_data *)(data);
 	if (!is_string_type_valid(
-		entry->vendor_defined_descriptor_title_str_type) ||
+		    entry->vendor_defined_descriptor_title_str_type) ||
 	    (entry->vendor_defined_descriptor_title_str_len == 0)) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
@@ -510,25 +510,26 @@
 	}
 
 	*descriptor_title_str_type =
-	    entry->vendor_defined_descriptor_title_str_type;
+		entry->vendor_defined_descriptor_title_str_type;
 	descriptor_title_str->ptr = entry->vendor_defined_descriptor_title_str;
 	descriptor_title_str->length =
-	    entry->vendor_defined_descriptor_title_str_len;
+		entry->vendor_defined_descriptor_title_str_len;
 
 	descriptor_data->ptr =
-	    descriptor_title_str->ptr + descriptor_title_str->length;
+		descriptor_title_str->ptr + descriptor_title_str->length;
 	descriptor_data->length =
-	    length - sizeof(entry->vendor_defined_descriptor_title_str_type) -
-	    sizeof(entry->vendor_defined_descriptor_title_str_len) -
-	    descriptor_title_str->length;
+		length -
+		sizeof(entry->vendor_defined_descriptor_title_str_type) -
+		sizeof(entry->vendor_defined_descriptor_title_str_len) -
+		descriptor_title_str->length;
 
 	return PLDM_SUCCESS;
 }
 
 int decode_pldm_comp_image_info(
-    const uint8_t *data, size_t length,
-    struct pldm_component_image_information *pldm_comp_image_info,
-    struct variable_field *comp_version_str)
+	const uint8_t *data, size_t length,
+	struct pldm_component_image_information *pldm_comp_image_info,
+	struct variable_field *comp_version_str)
 {
 	if (data == NULL || pldm_comp_image_info == NULL ||
 	    comp_version_str == NULL) {
@@ -540,7 +541,7 @@
 	}
 
 	struct pldm_component_image_information *data_header =
-	    (struct pldm_component_image_information *)(data);
+		(struct pldm_component_image_information *)(data);
 
 	if (!is_string_type_valid(data_header->comp_version_string_type) ||
 	    (data_header->comp_version_string_length == 0)) {
@@ -548,31 +549,31 @@
 	}
 
 	if (length < sizeof(struct pldm_component_image_information) +
-			 data_header->comp_version_string_length) {
+			     data_header->comp_version_string_length) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
 	pldm_comp_image_info->comp_classification =
-	    le16toh(data_header->comp_classification);
+		le16toh(data_header->comp_classification);
 	pldm_comp_image_info->comp_identifier =
-	    le16toh(data_header->comp_identifier);
+		le16toh(data_header->comp_identifier);
 	pldm_comp_image_info->comp_comparison_stamp =
-	    le32toh(data_header->comp_comparison_stamp);
+		le32toh(data_header->comp_comparison_stamp);
 	pldm_comp_image_info->comp_options.value =
-	    le16toh(data_header->comp_options.value);
+		le16toh(data_header->comp_options.value);
 	pldm_comp_image_info->requested_comp_activation_method.value =
-	    le16toh(data_header->requested_comp_activation_method.value);
+		le16toh(data_header->requested_comp_activation_method.value);
 	pldm_comp_image_info->comp_location_offset =
-	    le32toh(data_header->comp_location_offset);
+		le32toh(data_header->comp_location_offset);
 	pldm_comp_image_info->comp_size = le32toh(data_header->comp_size);
 	pldm_comp_image_info->comp_version_string_type =
-	    data_header->comp_version_string_type;
+		data_header->comp_version_string_type;
 	pldm_comp_image_info->comp_version_string_length =
-	    data_header->comp_version_string_length;
+		data_header->comp_version_string_length;
 
 	if ((pldm_comp_image_info->comp_options.bits.bit1 == false &&
 	     pldm_comp_image_info->comp_comparison_stamp !=
-		 PLDM_FWUP_INVALID_COMPONENT_COMPARISON_TIMESTAMP)) {
+		     PLDM_FWUP_INVALID_COMPONENT_COMPARISON_TIMESTAMP)) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
@@ -582,9 +583,9 @@
 	}
 
 	comp_version_str->ptr =
-	    data + sizeof(struct pldm_component_image_information);
+		data + sizeof(struct pldm_component_image_information);
 	comp_version_str->length =
-	    pldm_comp_image_info->comp_version_string_length;
+		pldm_comp_image_info->comp_version_string_length;
 
 	return PLDM_SUCCESS;
 }
@@ -629,7 +630,7 @@
 	}
 
 	struct pldm_query_device_identifiers_resp *response =
-	    (struct pldm_query_device_identifiers_resp *)msg->payload;
+		(struct pldm_query_device_identifiers_resp *)msg->payload;
 	*device_identifiers_len = le32toh(response->device_identifiers_len);
 
 	if (*device_identifiers_len < PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN) {
@@ -638,7 +639,7 @@
 
 	if (payload_length !=
 	    sizeof(struct pldm_query_device_identifiers_resp) +
-		*device_identifiers_len) {
+		    *device_identifiers_len) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 	*descriptor_count = response->descriptor_count;
@@ -647,8 +648,8 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 	*descriptor_data =
-	    (uint8_t *)(msg->payload +
-			sizeof(struct pldm_query_device_identifiers_resp));
+		(uint8_t *)(msg->payload +
+			    sizeof(struct pldm_query_device_identifiers_resp));
 	return PLDM_SUCCESS;
 }
 
@@ -669,11 +670,11 @@
 }
 
 int decode_get_firmware_parameters_resp(
-    const struct pldm_msg *msg, size_t payload_length,
-    struct pldm_get_firmware_parameters_resp *resp_data,
-    struct variable_field *active_comp_image_set_ver_str,
-    struct variable_field *pending_comp_image_set_ver_str,
-    struct variable_field *comp_parameter_table)
+	const struct pldm_msg *msg, size_t payload_length,
+	struct pldm_get_firmware_parameters_resp *resp_data,
+	struct variable_field *active_comp_image_set_ver_str,
+	struct variable_field *pending_comp_image_set_ver_str,
+	struct variable_field *comp_parameter_table)
 {
 	if (msg == NULL || resp_data == NULL ||
 	    active_comp_image_set_ver_str == NULL ||
@@ -692,10 +693,10 @@
 	}
 
 	struct pldm_get_firmware_parameters_resp *response =
-	    (struct pldm_get_firmware_parameters_resp *)msg->payload;
+		(struct pldm_get_firmware_parameters_resp *)msg->payload;
 
 	if (!is_string_type_valid(
-		response->active_comp_image_set_ver_str_type) ||
+		    response->active_comp_image_set_ver_str_type) ||
 	    (response->active_comp_image_set_ver_str_len == 0)) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
@@ -707,44 +708,44 @@
 		}
 	} else {
 		if (!is_string_type_valid(
-			response->pending_comp_image_set_ver_str_type)) {
+			    response->pending_comp_image_set_ver_str_type)) {
 			return PLDM_ERROR_INVALID_DATA;
 		}
 	}
 
 	size_t partial_response_length =
-	    sizeof(struct pldm_get_firmware_parameters_resp) +
-	    response->active_comp_image_set_ver_str_len +
-	    response->pending_comp_image_set_ver_str_len;
+		sizeof(struct pldm_get_firmware_parameters_resp) +
+		response->active_comp_image_set_ver_str_len +
+		response->pending_comp_image_set_ver_str_len;
 
 	if (payload_length < partial_response_length) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
 	resp_data->capabilities_during_update.value =
-	    le32toh(response->capabilities_during_update.value);
+		le32toh(response->capabilities_during_update.value);
 	resp_data->comp_count = le16toh(response->comp_count);
 	resp_data->active_comp_image_set_ver_str_type =
-	    response->active_comp_image_set_ver_str_type;
+		response->active_comp_image_set_ver_str_type;
 	resp_data->active_comp_image_set_ver_str_len =
-	    response->active_comp_image_set_ver_str_len;
+		response->active_comp_image_set_ver_str_len;
 	resp_data->pending_comp_image_set_ver_str_type =
-	    response->pending_comp_image_set_ver_str_type;
+		response->pending_comp_image_set_ver_str_type;
 	resp_data->pending_comp_image_set_ver_str_len =
-	    response->pending_comp_image_set_ver_str_len;
+		response->pending_comp_image_set_ver_str_len;
 
 	active_comp_image_set_ver_str->ptr =
-	    msg->payload + sizeof(struct pldm_get_firmware_parameters_resp);
+		msg->payload + sizeof(struct pldm_get_firmware_parameters_resp);
 	active_comp_image_set_ver_str->length =
-	    resp_data->active_comp_image_set_ver_str_len;
+		resp_data->active_comp_image_set_ver_str_len;
 
 	if (resp_data->pending_comp_image_set_ver_str_len != 0) {
 		pending_comp_image_set_ver_str->ptr =
-		    msg->payload +
-		    sizeof(struct pldm_get_firmware_parameters_resp) +
-		    resp_data->active_comp_image_set_ver_str_len;
+			msg->payload +
+			sizeof(struct pldm_get_firmware_parameters_resp) +
+			resp_data->active_comp_image_set_ver_str_len;
 		pending_comp_image_set_ver_str->length =
-		    resp_data->pending_comp_image_set_ver_str_len;
+			resp_data->pending_comp_image_set_ver_str_len;
 	} else {
 		pending_comp_image_set_ver_str->ptr = NULL;
 		pending_comp_image_set_ver_str->length = 0;
@@ -752,12 +753,12 @@
 
 	if (payload_length > partial_response_length && resp_data->comp_count) {
 		comp_parameter_table->ptr =
-		    msg->payload +
-		    sizeof(struct pldm_get_firmware_parameters_resp) +
-		    resp_data->active_comp_image_set_ver_str_len +
-		    resp_data->pending_comp_image_set_ver_str_len;
+			msg->payload +
+			sizeof(struct pldm_get_firmware_parameters_resp) +
+			resp_data->active_comp_image_set_ver_str_len +
+			resp_data->pending_comp_image_set_ver_str_len;
 		comp_parameter_table->length =
-		    payload_length - partial_response_length;
+			payload_length - partial_response_length;
 	} else {
 		comp_parameter_table->ptr = NULL;
 		comp_parameter_table->length = 0;
@@ -767,10 +768,10 @@
 }
 
 int decode_get_firmware_parameters_resp_comp_entry(
-    const uint8_t *data, size_t length,
-    struct pldm_component_parameter_entry *component_data,
-    struct variable_field *active_comp_ver_str,
-    struct variable_field *pending_comp_ver_str)
+	const uint8_t *data, size_t length,
+	struct pldm_component_parameter_entry *component_data,
+	struct variable_field *active_comp_ver_str,
+	struct variable_field *pending_comp_ver_str)
 {
 	if (data == NULL || component_data == NULL ||
 	    active_comp_ver_str == NULL || pending_comp_ver_str == NULL) {
@@ -782,7 +783,7 @@
 	}
 
 	struct pldm_component_parameter_entry *entry =
-	    (struct pldm_component_parameter_entry *)(data);
+		(struct pldm_component_parameter_entry *)(data);
 
 	size_t entry_length = sizeof(struct pldm_component_parameter_entry) +
 			      entry->active_comp_ver_str_len +
@@ -793,36 +794,36 @@
 	}
 
 	component_data->comp_classification =
-	    le16toh(entry->comp_classification);
+		le16toh(entry->comp_classification);
 	component_data->comp_identifier = le16toh(entry->comp_identifier);
 	component_data->comp_classification_index =
-	    entry->comp_classification_index;
+		entry->comp_classification_index;
 	component_data->active_comp_comparison_stamp =
-	    le32toh(entry->active_comp_comparison_stamp);
+		le32toh(entry->active_comp_comparison_stamp);
 	component_data->active_comp_ver_str_type =
-	    entry->active_comp_ver_str_type;
+		entry->active_comp_ver_str_type;
 	component_data->active_comp_ver_str_len =
-	    entry->active_comp_ver_str_len;
+		entry->active_comp_ver_str_len;
 	memcpy(component_data->active_comp_release_date,
 	       entry->active_comp_release_date,
 	       sizeof(entry->active_comp_release_date));
 	component_data->pending_comp_comparison_stamp =
-	    le32toh(entry->pending_comp_comparison_stamp);
+		le32toh(entry->pending_comp_comparison_stamp);
 	component_data->pending_comp_ver_str_type =
-	    entry->pending_comp_ver_str_type;
+		entry->pending_comp_ver_str_type;
 	component_data->pending_comp_ver_str_len =
-	    entry->pending_comp_ver_str_len;
+		entry->pending_comp_ver_str_len;
 	memcpy(component_data->pending_comp_release_date,
 	       entry->pending_comp_release_date,
 	       sizeof(entry->pending_comp_release_date));
 	component_data->comp_activation_methods.value =
-	    le16toh(entry->comp_activation_methods.value);
+		le16toh(entry->comp_activation_methods.value);
 	component_data->capabilities_during_update.value =
-	    le32toh(entry->capabilities_during_update.value);
+		le32toh(entry->capabilities_during_update.value);
 
 	if (entry->active_comp_ver_str_len != 0) {
 		active_comp_ver_str->ptr =
-		    data + sizeof(struct pldm_component_parameter_entry);
+			data + sizeof(struct pldm_component_parameter_entry);
 		active_comp_ver_str->length = entry->active_comp_ver_str_len;
 	} else {
 		active_comp_ver_str->ptr = NULL;
@@ -830,10 +831,9 @@
 	}
 
 	if (entry->pending_comp_ver_str_len != 0) {
-
 		pending_comp_ver_str->ptr =
-		    data + sizeof(struct pldm_component_parameter_entry) +
-		    entry->active_comp_ver_str_len;
+			data + sizeof(struct pldm_component_parameter_entry) +
+			entry->active_comp_ver_str_len;
 		pending_comp_ver_str->length = entry->pending_comp_ver_str_len;
 	} else {
 		pending_comp_ver_str->ptr = NULL;
@@ -857,7 +857,7 @@
 	}
 
 	if (payload_length != sizeof(struct pldm_request_update_req) +
-				  comp_img_set_ver_str->length) {
+				      comp_img_set_ver_str->length) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
@@ -875,7 +875,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FWUP;
@@ -886,7 +886,7 @@
 	}
 
 	struct pldm_request_update_req *request =
-	    (struct pldm_request_update_req *)msg->payload;
+		(struct pldm_request_update_req *)msg->payload;
 
 	request->max_transfer_size = htole32(max_transfer_size);
 	request->num_of_comp = htole16(num_of_comp);
@@ -922,7 +922,7 @@
 	}
 
 	struct pldm_request_update_resp *response =
-	    (struct pldm_request_update_resp *)msg->payload;
+		(struct pldm_request_update_resp *)msg->payload;
 
 	*fd_meta_data_len = le16toh(response->fd_meta_data_len);
 	*fd_will_send_pkg_data = response->fd_will_send_pkg_data;
@@ -930,19 +930,22 @@
 	return PLDM_SUCCESS;
 }
 
-int encode_pass_component_table_req(
-    uint8_t instance_id, uint8_t transfer_flag, uint16_t comp_classification,
-    uint16_t comp_identifier, uint8_t comp_classification_index,
-    uint32_t comp_comparison_stamp, uint8_t comp_ver_str_type,
-    uint8_t comp_ver_str_len, const struct variable_field *comp_ver_str,
-    struct pldm_msg *msg, size_t payload_length)
+int encode_pass_component_table_req(uint8_t instance_id, uint8_t transfer_flag,
+				    uint16_t comp_classification,
+				    uint16_t comp_identifier,
+				    uint8_t comp_classification_index,
+				    uint32_t comp_comparison_stamp,
+				    uint8_t comp_ver_str_type,
+				    uint8_t comp_ver_str_len,
+				    const struct variable_field *comp_ver_str,
+				    struct pldm_msg *msg, size_t payload_length)
 {
 	if (comp_ver_str == NULL || comp_ver_str->ptr == NULL || msg == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
 	if (payload_length != sizeof(struct pldm_pass_component_table_req) +
-				  comp_ver_str->length) {
+				      comp_ver_str->length) {
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
@@ -959,7 +962,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FWUP;
@@ -970,7 +973,7 @@
 	}
 
 	struct pldm_pass_component_table_req *request =
-	    (struct pldm_pass_component_table_req *)msg->payload;
+		(struct pldm_pass_component_table_req *)msg->payload;
 
 	request->transfer_flag = transfer_flag;
 	request->comp_classification = htole16(comp_classification);
@@ -1007,7 +1010,7 @@
 	}
 
 	struct pldm_pass_component_table_resp *response =
-	    (struct pldm_pass_component_table_resp *)msg->payload;
+		(struct pldm_pass_component_table_resp *)msg->payload;
 
 	if (!is_comp_resp_valid(response->comp_resp)) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -1024,12 +1027,12 @@
 }
 
 int encode_update_component_req(
-    uint8_t instance_id, uint16_t comp_classification, uint16_t comp_identifier,
-    uint8_t comp_classification_index, uint32_t comp_comparison_stamp,
-    uint32_t comp_image_size, bitfield32_t update_option_flags,
-    uint8_t comp_ver_str_type, uint8_t comp_ver_str_len,
-    const struct variable_field *comp_ver_str, struct pldm_msg *msg,
-    size_t payload_length)
+	uint8_t instance_id, uint16_t comp_classification,
+	uint16_t comp_identifier, uint8_t comp_classification_index,
+	uint32_t comp_comparison_stamp, uint32_t comp_image_size,
+	bitfield32_t update_option_flags, uint8_t comp_ver_str_type,
+	uint8_t comp_ver_str_len, const struct variable_field *comp_ver_str,
+	struct pldm_msg *msg, size_t payload_length)
 {
 	if (comp_ver_str == NULL || comp_ver_str->ptr == NULL || msg == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -1053,7 +1056,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FWUP;
@@ -1064,7 +1067,7 @@
 	}
 
 	struct pldm_update_component_req *request =
-	    (struct pldm_update_component_req *)msg->payload;
+		(struct pldm_update_component_req *)msg->payload;
 
 	request->comp_classification = htole16(comp_classification);
 	request->comp_identifier = htole16(comp_identifier);
@@ -1107,22 +1110,22 @@
 	}
 
 	struct pldm_update_component_resp *response =
-	    (struct pldm_update_component_resp *)msg->payload;
+		(struct pldm_update_component_resp *)msg->payload;
 
 	if (!is_comp_compatibility_resp_valid(
-		response->comp_compatibility_resp)) {
+		    response->comp_compatibility_resp)) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
 	if (!is_comp_compatibility_resp_code_valid(
-		response->comp_compatibility_resp_code)) {
+		    response->comp_compatibility_resp_code)) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
 	*comp_compatibility_resp = response->comp_compatibility_resp;
 	*comp_compatibility_resp_code = response->comp_compatibility_resp_code;
 	update_option_flags_enabled->value =
-	    le32toh(response->update_option_flags_enabled.value);
+		le32toh(response->update_option_flags_enabled.value);
 	*time_before_req_fw_data = le16toh(response->time_before_req_fw_data);
 
 	return PLDM_SUCCESS;
@@ -1139,7 +1142,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 	struct pldm_request_firmware_data_req *request =
-	    (struct pldm_request_firmware_data_req *)msg->payload;
+		(struct pldm_request_firmware_data_req *)msg->payload;
 	*offset = le32toh(request->offset);
 	*length = le32toh(request->length);
 
@@ -1159,7 +1162,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_FWUP;
@@ -1201,7 +1204,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_FWUP;
@@ -1242,7 +1245,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_FWUP;
@@ -1257,9 +1260,9 @@
 	return PLDM_SUCCESS;
 }
 
-int decode_apply_complete_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *apply_result,
-    bitfield16_t *comp_activation_methods_modification)
+int decode_apply_complete_req(const struct pldm_msg *msg, size_t payload_length,
+			      uint8_t *apply_result,
+			      bitfield16_t *comp_activation_methods_modification)
 {
 	if (msg == NULL || apply_result == NULL ||
 	    comp_activation_methods_modification == NULL) {
@@ -1271,11 +1274,11 @@
 	}
 
 	struct pldm_apply_complete_req *request =
-	    (struct pldm_apply_complete_req *)msg->payload;
+		(struct pldm_apply_complete_req *)msg->payload;
 
 	*apply_result = request->apply_result;
 	comp_activation_methods_modification->value =
-	    le16toh(request->comp_activation_methods_modification.value);
+		le16toh(request->comp_activation_methods_modification.value);
 
 	if ((*apply_result != PLDM_FWUP_APPLY_SUCCESS_WITH_ACTIVATION_METHOD) &&
 	    comp_activation_methods_modification->value) {
@@ -1296,7 +1299,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_FWUP;
@@ -1324,11 +1327,11 @@
 	}
 
 	if (!is_self_contained_activation_req_valid(
-		self_contained_activation_req)) {
+		    self_contained_activation_req)) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FWUP;
@@ -1339,7 +1342,7 @@
 	}
 
 	struct pldm_activate_firmware_req *request =
-	    (struct pldm_activate_firmware_req *)msg->payload;
+		(struct pldm_activate_firmware_req *)msg->payload;
 
 	request->self_contained_activation_req = self_contained_activation_req;
 
@@ -1366,10 +1369,10 @@
 	}
 
 	struct pldm_activate_firmware_resp *response =
-	    (struct pldm_activate_firmware_resp *)msg->payload;
+		(struct pldm_activate_firmware_resp *)msg->payload;
 
 	*estimated_time_activation =
-	    le16toh(response->estimated_time_activation);
+		le16toh(response->estimated_time_activation);
 
 	return PLDM_SUCCESS;
 }
@@ -1385,7 +1388,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FWUP;
@@ -1422,7 +1425,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 	struct pldm_get_status_resp *response =
-	    (struct pldm_get_status_resp *)msg->payload;
+		(struct pldm_get_status_resp *)msg->payload;
 
 	if (!is_state_valid(response->current_state)) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -1459,7 +1462,7 @@
 	*progress_percent = response->progress_percent;
 	*reason_code = response->reason_code;
 	update_option_flags_enabled->value =
-	    le32toh(response->update_option_flags_enabled.value);
+		le32toh(response->update_option_flags_enabled.value);
 
 	return PLDM_SUCCESS;
 }
@@ -1476,7 +1479,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FWUP;
@@ -1516,7 +1519,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FWUP;
@@ -1549,19 +1552,19 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 	struct pldm_cancel_update_resp *response =
-	    (struct pldm_cancel_update_resp *)msg->payload;
+		(struct pldm_cancel_update_resp *)msg->payload;
 
 	if (!is_non_functioning_component_indication_valid(
-		response->non_functioning_component_indication)) {
+		    response->non_functioning_component_indication)) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
 	*non_functioning_component_indication =
-	    response->non_functioning_component_indication;
+		response->non_functioning_component_indication;
 
 	if (*non_functioning_component_indication) {
 		non_functioning_component_bitmap->value =
-		    le64toh(response->non_functioning_component_bitmap);
+			le64toh(response->non_functioning_component_bitmap);
 	}
 
 	return PLDM_SUCCESS;
diff --git a/src/fru.c b/src/fru.c
index be9d411..684a559 100644
--- a/src/fru.c
+++ b/src/fru.c
@@ -20,7 +20,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FRU;
@@ -30,11 +30,11 @@
 }
 
 int decode_get_fru_record_table_metadata_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *fru_data_major_version, uint8_t *fru_data_minor_version,
-    uint32_t *fru_table_maximum_size, uint32_t *fru_table_length,
-    uint16_t *total_record_set_identifiers, uint16_t *total_table_records,
-    uint32_t *checksum)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *fru_data_major_version,
+	uint8_t *fru_data_minor_version, uint32_t *fru_table_maximum_size,
+	uint32_t *fru_table_length, uint16_t *total_record_set_identifiers,
+	uint16_t *total_table_records, uint32_t *checksum)
 {
 	if (msg == NULL || completion_code == NULL ||
 	    fru_data_major_version == NULL || fru_data_minor_version == NULL ||
@@ -54,14 +54,14 @@
 	}
 
 	struct pldm_get_fru_record_table_metadata_resp *response =
-	    (struct pldm_get_fru_record_table_metadata_resp *)msg->payload;
+		(struct pldm_get_fru_record_table_metadata_resp *)msg->payload;
 
 	*fru_data_major_version = response->fru_data_major_version;
 	*fru_data_minor_version = response->fru_data_minor_version;
 	*fru_table_maximum_size = le32toh(response->fru_table_maximum_size);
 	*fru_table_length = le32toh(response->fru_table_length);
 	*total_record_set_identifiers =
-	    le16toh(response->total_record_set_identifiers);
+		le16toh(response->total_record_set_identifiers);
 	*total_table_records = le16toh(response->total_table_records);
 	*checksum = le32toh(response->checksum);
 
@@ -69,17 +69,17 @@
 }
 
 int encode_get_fru_record_table_metadata_resp(
-    uint8_t instance_id, uint8_t completion_code,
-    uint8_t fru_data_major_version, uint8_t fru_data_minor_version,
-    uint32_t fru_table_maximum_size, uint32_t fru_table_length,
-    uint16_t total_record_set_identifiers, uint16_t total_table_records,
-    uint32_t checksum, struct pldm_msg *msg)
+	uint8_t instance_id, uint8_t completion_code,
+	uint8_t fru_data_major_version, uint8_t fru_data_minor_version,
+	uint32_t fru_table_maximum_size, uint32_t fru_table_length,
+	uint16_t total_record_set_identifiers, uint16_t total_table_records,
+	uint32_t checksum, struct pldm_msg *msg)
 {
 	if (msg == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_FRU;
@@ -91,16 +91,16 @@
 	}
 
 	struct pldm_get_fru_record_table_metadata_resp *response =
-	    (struct pldm_get_fru_record_table_metadata_resp *)msg->payload;
+		(struct pldm_get_fru_record_table_metadata_resp *)msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
 		response->fru_data_major_version = fru_data_major_version;
 		response->fru_data_minor_version = fru_data_minor_version;
 		response->fru_table_maximum_size =
-		    htole32(fru_table_maximum_size);
+			htole32(fru_table_maximum_size);
 		response->fru_table_length = htole32(fru_table_length);
 		response->total_record_set_identifiers =
-		    htole16(total_record_set_identifiers);
+			htole16(total_record_set_identifiers);
 		response->total_table_records = htole16(total_table_records);
 		response->checksum = htole32(checksum);
 	}
@@ -123,7 +123,7 @@
 	}
 
 	struct pldm_get_fru_record_table_req *req =
-	    (struct pldm_get_fru_record_table_req *)msg->payload;
+		(struct pldm_get_fru_record_table_req *)msg->payload;
 
 	*data_transfer_handle = le32toh(req->data_transfer_handle);
 	*transfer_operation_flag = req->transfer_operation_flag;
@@ -141,7 +141,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_FRU;
@@ -153,14 +153,13 @@
 	}
 
 	struct pldm_get_fru_record_table_resp *resp =
-	    (struct pldm_get_fru_record_table_resp *)msg->payload;
+		(struct pldm_get_fru_record_table_resp *)msg->payload;
 
 	resp->completion_code = completion_code;
 
 	if (resp->completion_code == PLDM_SUCCESS) {
-
 		resp->next_data_transfer_handle =
-		    htole32(next_data_transfer_handle);
+			htole32(next_data_transfer_handle);
 		resp->transfer_flag = transfer_flag;
 	}
 
@@ -183,7 +182,7 @@
 	}
 
 	struct pldm_fru_record_data_format *record =
-	    (struct pldm_fru_record_data_format *)(fru_table + *curr_size);
+		(struct pldm_fru_record_data_format *)(fru_table + *curr_size);
 	record->record_set_id = htole16(record_set_id);
 	record->record_type = record_type;
 	record->num_fru_fields = num_frus;
@@ -211,7 +210,7 @@
 			      uint16_t rsi, uint8_t rt, uint8_t ft)
 {
 	const struct pldm_fru_record_data_format *record_data_src =
-	    (const struct pldm_fru_record_data_format *)table;
+		(const struct pldm_fru_record_data_format *)table;
 	struct pldm_fru_record_data_format *record_data_dest;
 	int count = 0;
 
@@ -228,10 +227,11 @@
 			     i++) {
 				len = sizeof(*tlv) - 1 + tlv->length;
 				tlv = (const struct pldm_fru_record_tlv
-					   *)((char *)tlv + len);
+					       *)((char *)tlv + len);
 			}
 			record_data_src =
-			    (const struct pldm_fru_record_data_format *)(tlv);
+				(const struct pldm_fru_record_data_format
+					 *)(tlv);
 			continue;
 		}
 
@@ -259,19 +259,18 @@
 		}
 		record_data_dest->num_fru_fields = count;
 		record_data_src =
-		    (const struct pldm_fru_record_data_format *)(tlv);
+			(const struct pldm_fru_record_data_format *)(tlv);
 	}
 
 	*record_size = pos - record_table;
 }
 
 int encode_get_fru_record_by_option_req(
-    uint8_t instance_id, uint32_t data_transfer_handle,
-    uint16_t fru_table_handle, uint16_t record_set_identifier,
-    uint8_t record_type, uint8_t field_type, uint8_t transfer_op_flag,
-    struct pldm_msg *msg, size_t payload_length)
+	uint8_t instance_id, uint32_t data_transfer_handle,
+	uint16_t fru_table_handle, uint16_t record_set_identifier,
+	uint8_t record_type, uint8_t field_type, uint8_t transfer_op_flag,
+	struct pldm_msg *msg, size_t payload_length)
 {
-
 	if (msg == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
@@ -281,7 +280,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FRU;
@@ -292,7 +291,7 @@
 	}
 
 	struct pldm_get_fru_record_by_option_req *req =
-	    (struct pldm_get_fru_record_by_option_req *)msg->payload;
+		(struct pldm_get_fru_record_by_option_req *)msg->payload;
 
 	req->data_transfer_handle = htole32(data_transfer_handle);
 	req->fru_table_handle = htole16(fru_table_handle);
@@ -305,10 +304,10 @@
 }
 
 int decode_get_fru_record_by_option_req(
-    const struct pldm_msg *msg, size_t payload_length,
-    uint32_t *data_transfer_handle, uint16_t *fru_table_handle,
-    uint16_t *record_set_identifier, uint8_t *record_type, uint8_t *field_type,
-    uint8_t *transfer_op_flag)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint32_t *data_transfer_handle, uint16_t *fru_table_handle,
+	uint16_t *record_set_identifier, uint8_t *record_type,
+	uint8_t *field_type, uint8_t *transfer_op_flag)
 {
 	if (msg == NULL || data_transfer_handle == NULL ||
 	    fru_table_handle == NULL || record_set_identifier == NULL ||
@@ -323,7 +322,7 @@
 	}
 
 	struct pldm_get_fru_record_by_option_req *req =
-	    (struct pldm_get_fru_record_by_option_req *)msg->payload;
+		(struct pldm_get_fru_record_by_option_req *)msg->payload;
 
 	*data_transfer_handle = le32toh(req->data_transfer_handle);
 	*fru_table_handle = le16toh(req->fru_table_handle);
@@ -351,7 +350,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_FRU;
@@ -362,7 +361,7 @@
 	}
 
 	struct pldm_get_fru_record_by_option_resp *resp =
-	    (struct pldm_get_fru_record_by_option_resp *)msg->payload;
+		(struct pldm_get_fru_record_by_option_resp *)msg->payload;
 
 	resp->completion_code = completion_code;
 	resp->next_data_transfer_handle = htole32(next_data_transfer_handle);
@@ -376,9 +375,9 @@
 }
 
 int decode_get_fru_record_by_option_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_transfer_handle, uint8_t *transfer_flag,
-    struct variable_field *fru_structure_data)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_transfer_handle,
+	uint8_t *transfer_flag, struct variable_field *fru_structure_data)
 {
 	if (msg == NULL || completion_code == NULL ||
 	    next_transfer_handle == NULL || transfer_flag == NULL ||
@@ -396,13 +395,13 @@
 	}
 
 	struct pldm_get_fru_record_by_option_resp *resp =
-	    (struct pldm_get_fru_record_by_option_resp *)msg->payload;
+		(struct pldm_get_fru_record_by_option_resp *)msg->payload;
 
 	*next_transfer_handle = le32toh(resp->next_data_transfer_handle);
 	*transfer_flag = resp->transfer_flag;
 	fru_structure_data->ptr = resp->fru_structure_data;
 	fru_structure_data->length =
-	    payload_length - PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES;
+		payload_length - PLDM_GET_FRU_RECORD_BY_OPTION_MIN_RESP_BYTES;
 
 	return PLDM_SUCCESS;
 }
@@ -420,7 +419,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_FRU;
@@ -432,7 +431,7 @@
 	}
 
 	struct pldm_get_fru_record_table_req *req =
-	    (struct pldm_get_fru_record_table_req *)msg->payload;
+		(struct pldm_get_fru_record_table_req *)msg->payload;
 	req->data_transfer_handle = htole32(data_transfer_handle);
 	req->transfer_operation_flag = transfer_operation_flag;
 
@@ -440,10 +439,10 @@
 }
 
 int decode_get_fru_record_table_resp_safe(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_data_transfer_handle, uint8_t *transfer_flag,
-    uint8_t *fru_record_table_data, size_t *fru_record_table_length,
-    size_t max_fru_record_table_length)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint32_t *next_data_transfer_handle,
+	uint8_t *transfer_flag, uint8_t *fru_record_table_data,
+	size_t *fru_record_table_length, size_t max_fru_record_table_length)
 {
 	if (msg == NULL || completion_code == NULL ||
 	    next_data_transfer_handle == NULL || transfer_flag == NULL ||
@@ -460,13 +459,13 @@
 	}
 
 	struct pldm_get_fru_record_table_resp *resp =
-	    (struct pldm_get_fru_record_table_resp *)msg->payload;
+		(struct pldm_get_fru_record_table_resp *)msg->payload;
 
 	*next_data_transfer_handle = le32toh(resp->next_data_transfer_handle);
 	*transfer_flag = resp->transfer_flag;
 
 	*fru_record_table_length =
-	    payload_length - PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES;
+		payload_length - PLDM_GET_FRU_RECORD_TABLE_MIN_RESP_BYTES;
 
 	if (*fru_record_table_length > max_fru_record_table_length) {
 		return PLDM_ERROR_INVALID_LENGTH;
@@ -478,15 +477,18 @@
 	return PLDM_SUCCESS;
 }
 
-int decode_get_fru_record_table_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint32_t *next_data_transfer_handle, uint8_t *transfer_flag,
-    uint8_t *fru_record_table_data, size_t *fru_record_table_length)
+int decode_get_fru_record_table_resp(const struct pldm_msg *msg,
+				     size_t payload_length,
+				     uint8_t *completion_code,
+				     uint32_t *next_data_transfer_handle,
+				     uint8_t *transfer_flag,
+				     uint8_t *fru_record_table_data,
+				     size_t *fru_record_table_length)
 {
 	return decode_get_fru_record_table_resp_safe(
-	    msg, payload_length, completion_code, next_data_transfer_handle,
-	    transfer_flag, fru_record_table_data, fru_record_table_length,
-	    (size_t)-1);
+		msg, payload_length, completion_code, next_data_transfer_handle,
+		transfer_flag, fru_record_table_data, fru_record_table_length,
+		(size_t)-1);
 }
 
 int decode_set_fru_record_table_req(const struct pldm_msg *msg,
@@ -506,12 +508,12 @@
 	}
 
 	struct pldm_set_fru_record_table_req *req =
-	    (struct pldm_set_fru_record_table_req *)msg->payload;
+		(struct pldm_set_fru_record_table_req *)msg->payload;
 
 	*data_transfer_handle = le32toh(req->data_transfer_handle);
 	*transfer_flag = req->transfer_flag;
 	fru_table_data->length =
-	    payload_length - PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES;
+		payload_length - PLDM_SET_FRU_RECORD_TABLE_MIN_REQ_BYTES;
 	fru_table_data->ptr = req->fru_record_table_data;
 
 	return PLDM_SUCCESS;
@@ -530,7 +532,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_FRU;
@@ -542,10 +544,10 @@
 	}
 
 	struct pldm_set_fru_record_table_resp *response =
-	    (struct pldm_set_fru_record_table_resp *)msg->payload;
+		(struct pldm_set_fru_record_table_resp *)msg->payload;
 	response->completion_code = completion_code;
 	response->next_data_transfer_handle =
-	    htole32(next_data_transfer_handle);
+		htole32(next_data_transfer_handle);
 
 	return PLDM_SUCCESS;
 }
diff --git a/src/mctp-defines.h b/src/mctp-defines.h
index 6c3d086..912d47c 100644
--- a/src/mctp-defines.h
+++ b/src/mctp-defines.h
@@ -6,7 +6,7 @@
 #endif
 
 #define MCTP_MSG_TYPE_PLDM 1
-#define MCTP_MAX_NUM_EID 256
+#define MCTP_MAX_NUM_EID   256
 
 #ifdef __cplusplus
 }
diff --git a/src/msgbuf.h b/src/msgbuf.h
index f5d4a54..62992a0 100644
--- a/src/msgbuf.h
+++ b/src/msgbuf.h
@@ -2,6 +2,13 @@
 #define PLDM_MSGBUF_H
 
 #ifdef __cplusplus
+/*
+ * Fix up C11's _Static_assert() vs C++'s static_assert().
+ *
+ * Can we please have nice things for once.
+ */
+// NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
+#define _Static_assert(...) static_assert(__VA_ARGS__)
 extern "C" {
 #endif
 
@@ -333,14 +340,14 @@
 }
 
 #define pldm_msgbuf_extract(ctx, dst)                                          \
-	_Generic((*(dst)), uint8_t                                             \
-		 : pldm_msgbuf_extract_uint8, int8_t                           \
-		 : pldm_msgbuf_extract_int8, uint16_t                          \
-		 : pldm_msgbuf_extract_uint16, int16_t                         \
-		 : pldm_msgbuf_extract_int16, uint32_t                         \
-		 : pldm_msgbuf_extract_uint32, int32_t                         \
-		 : pldm_msgbuf_extract_int32, real32_t                         \
-		 : pldm_msgbuf_extract_real32)(ctx, dst)
+	_Generic((*(dst)),                                                     \
+		uint8_t: pldm_msgbuf_extract_uint8,                            \
+		int8_t: pldm_msgbuf_extract_int8,                              \
+		uint16_t: pldm_msgbuf_extract_uint16,                          \
+		int16_t: pldm_msgbuf_extract_int16,                            \
+		uint32_t: pldm_msgbuf_extract_uint32,                          \
+		int32_t: pldm_msgbuf_extract_int32,                            \
+		real32_t: pldm_msgbuf_extract_real32)(ctx, dst)
 
 static inline int pldm_msgbuf_extract_array_uint8(struct pldm_msgbuf *ctx,
 						  uint8_t *dst, size_t count)
@@ -373,8 +380,8 @@
 }
 
 #define pldm_msgbuf_extract_array(ctx, dst, count)                             \
-	_Generic((*(dst)), uint8_t                                             \
-		 : pldm_msgbuf_extract_array_uint8)(ctx, dst, count)
+	_Generic((*(dst)), uint8_t: pldm_msgbuf_extract_array_uint8)(ctx, dst, \
+								     count)
 
 static inline int pldm_msgbuf_insert_uint32(struct pldm_msgbuf *ctx,
 					    const uint32_t src)
@@ -499,13 +506,13 @@
 }
 
 #define pldm_msgbuf_insert(dst, src)                                           \
-	_Generic((src), uint8_t                                                \
-		 : pldm_msgbuf_insert_uint8, int8_t                            \
-		 : pldm_msgbuf_insert_int8, uint16_t                           \
-		 : pldm_msgbuf_insert_uint16, int16_t                          \
-		 : pldm_msgbuf_insert_int16, uint32_t                          \
-		 : pldm_msgbuf_insert_uint32, int32_t                          \
-		 : pldm_msgbuf_insert_int32)(dst, src)
+	_Generic((src),                                                        \
+		uint8_t: pldm_msgbuf_insert_uint8,                             \
+		int8_t: pldm_msgbuf_insert_int8,                               \
+		uint16_t: pldm_msgbuf_insert_uint16,                           \
+		int16_t: pldm_msgbuf_insert_int16,                             \
+		uint32_t: pldm_msgbuf_insert_uint32,                           \
+		int32_t: pldm_msgbuf_insert_int32)(dst, src)
 
 static inline int pldm_msgbuf_insert_array_uint8(struct pldm_msgbuf *ctx,
 						 const uint8_t *src,
@@ -538,8 +545,8 @@
 }
 
 #define pldm_msgbuf_insert_array(dst, src, count)                              \
-	_Generic((*(src)), uint8_t                                             \
-		 : pldm_msgbuf_insert_array_uint8)(dst, src, count)
+	_Generic((*(src)), uint8_t: pldm_msgbuf_insert_array_uint8)(dst, src,  \
+								    count)
 
 static inline int pldm_msgbuf_span_required(struct pldm_msgbuf *ctx,
 					    size_t required, void **cursor)
diff --git a/src/oem/ibm/file_io.c b/src/oem/ibm/file_io.c
index 79132a1..10af817 100644
--- a/src/oem/ibm/file_io.c
+++ b/src/oem/ibm/file_io.c
@@ -17,7 +17,7 @@
 	}
 
 	struct pldm_read_write_file_memory_req *request =
-	    (struct pldm_read_write_file_memory_req *)msg->payload;
+		(struct pldm_read_write_file_memory_req *)msg->payload;
 
 	*file_handle = le32toh(request->file_handle);
 	*offset = le32toh(request->offset);
@@ -35,7 +35,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -46,7 +46,7 @@
 	}
 
 	struct pldm_read_write_file_memory_resp *response =
-	    (struct pldm_read_write_file_memory_resp *)msg->payload;
+		(struct pldm_read_write_file_memory_resp *)msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
 		response->length = htole32(length);
@@ -64,7 +64,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -75,7 +75,7 @@
 	}
 
 	struct pldm_read_write_file_memory_req *req =
-	    (struct pldm_read_write_file_memory_req *)msg->payload;
+		(struct pldm_read_write_file_memory_req *)msg->payload;
 	req->file_handle = htole32(file_handle);
 	req->offset = htole32(offset);
 	req->length = htole32(length);
@@ -96,7 +96,7 @@
 	}
 
 	struct pldm_read_write_file_memory_resp *response =
-	    (struct pldm_read_write_file_memory_resp *)msg->payload;
+		(struct pldm_read_write_file_memory_resp *)msg->payload;
 	*completion_code = response->completion_code;
 	if (*completion_code == PLDM_SUCCESS) {
 		*length = le32toh(response->length);
@@ -119,7 +119,7 @@
 	}
 
 	struct pldm_get_file_table_req *request =
-	    (struct pldm_get_file_table_req *)msg->payload;
+		(struct pldm_get_file_table_req *)msg->payload;
 
 	*transfer_handle = le32toh(request->transfer_handle);
 	*transfer_opflag = request->operation_flag;
@@ -137,7 +137,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -148,7 +148,7 @@
 	}
 
 	struct pldm_get_file_table_resp *response =
-	    (struct pldm_get_file_table_resp *)msg->payload;
+		(struct pldm_get_file_table_resp *)msg->payload;
 	response->completion_code = completion_code;
 
 	if (completion_code == PLDM_SUCCESS) {
@@ -168,7 +168,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -179,7 +179,7 @@
 	}
 
 	struct pldm_get_file_table_req *request =
-	    (struct pldm_get_file_table_req *)msg->payload;
+		(struct pldm_get_file_table_req *)msg->payload;
 
 	request->transfer_handle = htole32(transfer_handle);
 	request->operation_flag = transfer_opflag;
@@ -211,7 +211,7 @@
 	}
 
 	struct pldm_get_file_table_resp *response =
-	    (struct pldm_get_file_table_resp *)msg->payload;
+		(struct pldm_get_file_table_resp *)msg->payload;
 
 	*next_transfer_handle = le32toh(response->next_transfer_handle);
 	*transfer_flag = response->transfer_flag;
@@ -219,7 +219,7 @@
 					sizeof(*next_transfer_handle) +
 					sizeof(*transfer_flag);
 	*file_table_length =
-	    payload_length - PLDM_GET_FILE_TABLE_MIN_RESP_BYTES;
+		payload_length - PLDM_GET_FILE_TABLE_MIN_RESP_BYTES;
 
 	return PLDM_SUCCESS;
 }
@@ -238,7 +238,7 @@
 	}
 
 	struct pldm_read_file_req *request =
-	    (struct pldm_read_file_req *)msg->payload;
+		(struct pldm_read_file_req *)msg->payload;
 
 	*file_handle = le32toh(request->file_handle);
 	*offset = le32toh(request->offset);
@@ -258,7 +258,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -269,7 +269,7 @@
 	}
 
 	struct pldm_read_file_req *request =
-	    (struct pldm_read_file_req *)msg->payload;
+		(struct pldm_read_file_req *)msg->payload;
 
 	request->file_handle = htole32(file_handle);
 	request->offset = htole32(offset);
@@ -291,7 +291,7 @@
 	}
 
 	struct pldm_read_file_resp *response =
-	    (struct pldm_read_file_resp *)msg->payload;
+		(struct pldm_read_file_resp *)msg->payload;
 
 	*completion_code = response->completion_code;
 	if (*completion_code == PLDM_SUCCESS) {
@@ -312,7 +312,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -323,7 +323,7 @@
 	}
 
 	struct pldm_read_file_resp *response =
-	    (struct pldm_read_file_resp *)msg->payload;
+		(struct pldm_read_file_resp *)msg->payload;
 	response->completion_code = completion_code;
 
 	if (response->completion_code == PLDM_SUCCESS) {
@@ -346,7 +346,7 @@
 	}
 
 	struct pldm_write_file_req *request =
-	    (struct pldm_write_file_req *)msg->payload;
+		(struct pldm_write_file_req *)msg->payload;
 
 	*file_handle = le32toh(request->file_handle);
 	*offset = le32toh(request->offset);
@@ -355,7 +355,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 	*file_data_offset =
-	    sizeof(*file_handle) + sizeof(*offset) + sizeof(*length);
+		sizeof(*file_handle) + sizeof(*offset) + sizeof(*length);
 
 	return PLDM_SUCCESS;
 }
@@ -372,7 +372,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -383,7 +383,7 @@
 	}
 
 	struct pldm_write_file_req *request =
-	    (struct pldm_write_file_req *)msg->payload;
+		(struct pldm_write_file_req *)msg->payload;
 
 	request->file_handle = htole32(file_handle);
 	request->offset = htole32(offset);
@@ -404,7 +404,7 @@
 	}
 
 	struct pldm_write_file_resp *response =
-	    (struct pldm_write_file_resp *)msg->payload;
+		(struct pldm_write_file_resp *)msg->payload;
 
 	*completion_code = le32toh(response->completion_code);
 	if (response->completion_code == PLDM_SUCCESS) {
@@ -421,7 +421,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -432,7 +432,7 @@
 	}
 
 	struct pldm_write_file_resp *response =
-	    (struct pldm_write_file_resp *)msg->payload;
+		(struct pldm_write_file_resp *)msg->payload;
 	response->completion_code = completion_code;
 
 	if (response->completion_code == PLDM_SUCCESS) {
@@ -458,7 +458,7 @@
 	}
 
 	struct pldm_read_write_file_by_type_memory_req *request =
-	    (struct pldm_read_write_file_by_type_memory_req *)msg->payload;
+		(struct pldm_read_write_file_by_type_memory_req *)msg->payload;
 	*file_type = le16toh(request->file_type);
 	*file_handle = le32toh(request->file_handle);
 	*offset = le32toh(request->offset);
@@ -476,7 +476,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -487,7 +487,7 @@
 	}
 
 	struct pldm_read_write_file_by_type_memory_resp *response =
-	    (struct pldm_read_write_file_by_type_memory_resp *)msg->payload;
+		(struct pldm_read_write_file_by_type_memory_resp *)msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
 		response->length = htole32(length);
@@ -505,7 +505,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -516,7 +516,7 @@
 	}
 
 	struct pldm_read_write_file_by_type_memory_req *req =
-	    (struct pldm_read_write_file_by_type_memory_req *)msg->payload;
+		(struct pldm_read_write_file_by_type_memory_req *)msg->payload;
 	req->file_type = htole16(file_type);
 	req->file_handle = htole32(file_handle);
 	req->offset = htole32(offset);
@@ -540,7 +540,7 @@
 	}
 
 	struct pldm_read_write_file_by_type_memory_resp *response =
-	    (struct pldm_read_write_file_by_type_memory_resp *)msg->payload;
+		(struct pldm_read_write_file_by_type_memory_resp *)msg->payload;
 	*completion_code = response->completion_code;
 	if (*completion_code == PLDM_SUCCESS) {
 		*length = le32toh(response->length);
@@ -563,7 +563,7 @@
 	}
 
 	struct pldm_new_file_req *request =
-	    (struct pldm_new_file_req *)msg->payload;
+		(struct pldm_new_file_req *)msg->payload;
 	*file_type = le16toh(request->file_type);
 	*file_handle = le32toh(request->file_handle);
 	*length = le64toh(request->length);
@@ -578,7 +578,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -589,7 +589,7 @@
 	}
 
 	struct pldm_new_file_resp *response =
-	    (struct pldm_new_file_resp *)msg->payload;
+		(struct pldm_new_file_resp *)msg->payload;
 	response->completion_code = completion_code;
 
 	return PLDM_SUCCESS;
@@ -603,7 +603,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -614,7 +614,7 @@
 	}
 
 	struct pldm_new_file_req *req =
-	    (struct pldm_new_file_req *)msg->payload;
+		(struct pldm_new_file_req *)msg->payload;
 	req->file_type = htole16(file_type);
 	req->file_handle = htole32(file_handle);
 	req->length = htole64(length);
@@ -634,7 +634,7 @@
 	}
 
 	struct pldm_new_file_resp *response =
-	    (struct pldm_new_file_resp *)msg->payload;
+		(struct pldm_new_file_resp *)msg->payload;
 	*completion_code = response->completion_code;
 
 	return PLDM_SUCCESS;
@@ -655,7 +655,7 @@
 	}
 
 	struct pldm_read_write_file_by_type_req *request =
-	    (struct pldm_read_write_file_by_type_req *)msg->payload;
+		(struct pldm_read_write_file_by_type_req *)msg->payload;
 	*file_type = le16toh(request->file_type);
 	*file_handle = le32toh(request->file_handle);
 	*offset = le32toh(request->offset);
@@ -676,7 +676,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -687,7 +687,7 @@
 	}
 
 	struct pldm_read_write_file_by_type_resp *response =
-	    (struct pldm_read_write_file_by_type_resp *)msg->payload;
+		(struct pldm_read_write_file_by_type_resp *)msg->payload;
 	response->completion_code = completion_code;
 	if (response->completion_code == PLDM_SUCCESS) {
 		response->length = htole32(length);
@@ -709,7 +709,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -720,7 +720,7 @@
 	}
 
 	struct pldm_read_write_file_by_type_req *req =
-	    (struct pldm_read_write_file_by_type_req *)msg->payload;
+		(struct pldm_read_write_file_by_type_req *)msg->payload;
 	req->file_type = htole16(file_type);
 	req->file_handle = htole32(file_handle);
 	req->offset = htole32(offset);
@@ -742,7 +742,7 @@
 	}
 
 	struct pldm_read_write_file_by_type_resp *response =
-	    (struct pldm_read_write_file_by_type_resp *)msg->payload;
+		(struct pldm_read_write_file_by_type_resp *)msg->payload;
 	*completion_code = response->completion_code;
 	if (*completion_code == PLDM_SUCCESS) {
 		*length = le32toh(response->length);
@@ -764,7 +764,7 @@
 	}
 
 	struct pldm_file_ack_req *request =
-	    (struct pldm_file_ack_req *)msg->payload;
+		(struct pldm_file_ack_req *)msg->payload;
 	*file_type = le16toh(request->file_type);
 	*file_handle = le32toh(request->file_handle);
 	*file_status = request->file_status;
@@ -779,7 +779,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -790,7 +790,7 @@
 	}
 
 	struct pldm_file_ack_resp *response =
-	    (struct pldm_file_ack_resp *)msg->payload;
+		(struct pldm_file_ack_resp *)msg->payload;
 	response->completion_code = completion_code;
 
 	return PLDM_SUCCESS;
@@ -804,7 +804,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -815,7 +815,7 @@
 	}
 
 	struct pldm_file_ack_req *req =
-	    (struct pldm_file_ack_req *)msg->payload;
+		(struct pldm_file_ack_req *)msg->payload;
 	req->file_type = htole16(file_type);
 	req->file_handle = htole32(file_handle);
 	req->file_status = file_status;
@@ -835,22 +835,23 @@
 	}
 
 	struct pldm_file_ack_resp *response =
-	    (struct pldm_file_ack_resp *)msg->payload;
+		(struct pldm_file_ack_resp *)msg->payload;
 	*completion_code = response->completion_code;
 
 	return PLDM_SUCCESS;
 }
 
 int encode_file_ack_with_meta_data_req(
-    uint8_t instance_id, uint16_t file_type, uint32_t file_handle,
-    uint8_t file_status, uint32_t file_meta_data_1, uint32_t file_meta_data_2,
-    uint32_t file_meta_data_3, uint32_t file_meta_data_4, struct pldm_msg *msg)
+	uint8_t instance_id, uint16_t file_type, uint32_t file_handle,
+	uint8_t file_status, uint32_t file_meta_data_1,
+	uint32_t file_meta_data_2, uint32_t file_meta_data_3,
+	uint32_t file_meta_data_4, struct pldm_msg *msg)
 {
 	if (msg == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -861,7 +862,7 @@
 	}
 
 	struct pldm_file_ack_with_meta_data_req *req =
-	    (struct pldm_file_ack_with_meta_data_req *)msg->payload;
+		(struct pldm_file_ack_with_meta_data_req *)msg->payload;
 	req->file_type = htole16(file_type);
 	req->file_handle = htole32(file_handle);
 	req->file_status = file_status;
@@ -886,17 +887,17 @@
 	}
 
 	struct pldm_file_ack_with_meta_data_resp *response =
-	    (struct pldm_file_ack_with_meta_data_resp *)msg->payload;
+		(struct pldm_file_ack_with_meta_data_resp *)msg->payload;
 	*completion_code = response->completion_code;
 
 	return PLDM_SUCCESS;
 }
 
 int decode_file_ack_with_meta_data_req(
-    const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
-    uint32_t *file_handle, uint8_t *file_status, uint32_t *file_meta_data_1,
-    uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
-    uint32_t *file_meta_data_4)
+	const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
+	uint32_t *file_handle, uint8_t *file_status, uint32_t *file_meta_data_1,
+	uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
+	uint32_t *file_meta_data_4)
 {
 	if (msg == NULL || file_type == NULL || file_handle == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -907,7 +908,7 @@
 	}
 
 	struct pldm_file_ack_with_meta_data_req *request =
-	    (struct pldm_file_ack_with_meta_data_req *)msg->payload;
+		(struct pldm_file_ack_with_meta_data_req *)msg->payload;
 	*file_type = le16toh(request->file_type);
 	*file_handle = le32toh(request->file_handle);
 	*file_status = request->file_status;
@@ -927,7 +928,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -938,22 +939,25 @@
 	}
 
 	struct pldm_file_ack_with_meta_data_resp *response =
-	    (struct pldm_file_ack_with_meta_data_resp *)msg->payload;
+		(struct pldm_file_ack_with_meta_data_resp *)msg->payload;
 	response->completion_code = completion_code;
 
 	return PLDM_SUCCESS;
 }
 
-int encode_new_file_with_metadata_req(
-    uint8_t instance_id, uint16_t file_type, uint32_t file_handle,
-    uint64_t length, uint32_t file_meta_data_1, uint32_t file_meta_data_2,
-    uint32_t file_meta_data_3, uint32_t file_meta_data_4, struct pldm_msg *msg)
+int encode_new_file_with_metadata_req(uint8_t instance_id, uint16_t file_type,
+				      uint32_t file_handle, uint64_t length,
+				      uint32_t file_meta_data_1,
+				      uint32_t file_meta_data_2,
+				      uint32_t file_meta_data_3,
+				      uint32_t file_meta_data_4,
+				      struct pldm_msg *msg)
 {
 	if (msg == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -964,7 +968,7 @@
 	}
 
 	struct pldm_new_file_with_metadata_req *req =
-	    (struct pldm_new_file_with_metadata_req *)msg->payload;
+		(struct pldm_new_file_with_metadata_req *)msg->payload;
 	req->file_type = htole16(file_type);
 	req->file_handle = htole32(file_handle);
 	req->length = htole64(length);
@@ -990,7 +994,7 @@
 	}
 
 	struct pldm_new_file_with_metadata_resp *response =
-	    (struct pldm_new_file_with_metadata_resp *)msg->payload;
+		(struct pldm_new_file_with_metadata_resp *)msg->payload;
 
 	*completion_code = msg->payload[0];
 	if (*completion_code == PLDM_SUCCESS) {
@@ -1000,10 +1004,10 @@
 }
 
 int decode_new_file_with_metadata_req(
-    const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
-    uint32_t *file_handle, uint64_t *length, uint32_t *file_meta_data_1,
-    uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
-    uint32_t *file_meta_data_4)
+	const struct pldm_msg *msg, size_t payload_length, uint16_t *file_type,
+	uint32_t *file_handle, uint64_t *length, uint32_t *file_meta_data_1,
+	uint32_t *file_meta_data_2, uint32_t *file_meta_data_3,
+	uint32_t *file_meta_data_4)
 {
 	if (msg == NULL || file_type == NULL || file_handle == NULL ||
 	    length == NULL) {
@@ -1016,7 +1020,7 @@
 	}
 
 	struct pldm_new_file_with_metadata_req *request =
-	    (struct pldm_new_file_with_metadata_req *)msg->payload;
+		(struct pldm_new_file_with_metadata_req *)msg->payload;
 	*file_type = le16toh(request->file_type);
 	*file_handle = le32toh(request->file_handle);
 	*length = le64toh(request->length);
@@ -1036,7 +1040,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -1047,7 +1051,7 @@
 	}
 
 	struct pldm_new_file_with_metadata_resp *response =
-	    (struct pldm_new_file_with_metadata_resp *)msg->payload;
+		(struct pldm_new_file_with_metadata_resp *)msg->payload;
 
 	if (response->completion_code == PLDM_SUCCESS) {
 		response->completion_code = completion_code;
diff --git a/src/oem/ibm/host.c b/src/oem/ibm/host.c
index 5cdcf74..6534e5b 100644
--- a/src/oem/ibm/host.c
+++ b/src/oem/ibm/host.c
@@ -16,7 +16,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -51,7 +51,7 @@
 	}
 
 	struct pldm_get_alert_status_resp *response =
-	    (struct pldm_get_alert_status_resp *)msg->payload;
+		(struct pldm_get_alert_status_resp *)msg->payload;
 
 	*rack_entry = le32toh(response->rack_entry);
 	*pri_cec_node = le32toh(response->pri_cec_node);
@@ -87,7 +87,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_OEM;
@@ -98,7 +98,7 @@
 	}
 
 	struct pldm_get_alert_status_resp *response =
-	    (struct pldm_get_alert_status_resp *)msg->payload;
+		(struct pldm_get_alert_status_resp *)msg->payload;
 
 	response->completion_code = completion_code;
 	response->rack_entry = htole32(rack_entry);
diff --git a/src/oem/ibm/platform.c b/src/oem/ibm/platform.c
index 15e9463..9f68bce 100644
--- a/src/oem/ibm/platform.c
+++ b/src/oem/ibm/platform.c
@@ -27,7 +27,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -38,7 +38,7 @@
 	}
 
 	struct pldm_bios_attribute_update_event_req *request =
-	    (struct pldm_bios_attribute_update_event_req *)msg->payload;
+		(struct pldm_bios_attribute_update_event_req *)msg->payload;
 	request->format_version = format_version;
 	request->tid = tid;
 	request->event_class = PLDM_EVENT_TYPE_OEM_EVENT_BIOS_ATTRIBUTE_UPDATE;
diff --git a/src/pdr.c b/src/pdr.c
index 2fe9e7b..232dd89 100644
--- a/src/pdr.c
+++ b/src/pdr.c
@@ -54,7 +54,7 @@
 {
 	assert(repo != NULL);
 	uint32_t last_used_hdl =
-	    repo->last != NULL ? repo->last->record_handle : 0;
+		repo->last != NULL ? repo->last->record_handle : 0;
 	assert(last_used_hdl != UINT32_MAX);
 
 	return last_used_hdl + 1;
@@ -70,8 +70,9 @@
 
 	pldm_pdr_record *record = malloc(sizeof(pldm_pdr_record));
 	assert(record != NULL);
-	record->record_handle =
-	    record_handle == 0 ? get_new_record_handle(repo) : record_handle;
+	record->record_handle = record_handle == 0 ?
+					get_new_record_handle(repo) :
+					record_handle;
 	record->size = size;
 	record->is_remote = is_remote;
 	record->terminus_handle = terminus_handle;
@@ -87,7 +88,7 @@
 		 */
 		if (!record_handle) {
 			struct pldm_pdr_hdr *hdr =
-			    (struct pldm_pdr_hdr *)(record->data);
+				(struct pldm_pdr_hdr *)(record->data);
 			hdr->record_handle = htole32(record->record_handle);
 		}
 	}
@@ -104,7 +105,7 @@
 	assert(data != NULL);
 
 	pldm_pdr_record *record = make_new_record(
-	    repo, data, size, record_handle, is_remote, terminus_handle);
+		repo, data, size, record_handle, is_remote, terminus_handle);
 	add_record(repo, record);
 
 	return record->record_handle;
@@ -158,7 +159,7 @@
 			*size = record->size;
 			*data = record->data;
 			*next_record_handle =
-			    get_next_record_handle(repo, record);
+				get_next_record_handle(repo, record);
 			return record;
 		}
 		record = record->next;
@@ -269,8 +270,8 @@
 	hdr->record_change_num = 0;
 	hdr->length = htole16(sizeof(struct pldm_pdr_fru_record_set));
 	struct pldm_pdr_fru_record_set *fru =
-	    (struct pldm_pdr_fru_record_set *)((uint8_t *)hdr +
-					       sizeof(struct pldm_pdr_hdr));
+		(struct pldm_pdr_fru_record_set *)((uint8_t *)hdr +
+						   sizeof(struct pldm_pdr_hdr));
 	fru->terminus_handle = htole16(terminus_handle);
 	fru->fru_rsi = htole16(fru_rsi);
 	fru->entity_type = htole16(entity_type);
@@ -282,9 +283,9 @@
 }
 
 const pldm_pdr_record *pldm_pdr_fru_record_set_find_by_rsi(
-    const pldm_pdr *repo, uint16_t fru_rsi, uint16_t *terminus_handle,
-    uint16_t *entity_type, uint16_t *entity_instance_num,
-    uint16_t *container_id)
+	const pldm_pdr *repo, uint16_t fru_rsi, uint16_t *terminus_handle,
+	uint16_t *entity_type, uint16_t *entity_instance_num,
+	uint16_t *container_id)
 {
 	assert(terminus_handle != NULL);
 	assert(entity_type != NULL);
@@ -294,22 +295,23 @@
 	uint8_t *data = NULL;
 	uint32_t size = 0;
 	const pldm_pdr_record *curr_record = pldm_pdr_find_record_by_type(
-	    repo, PLDM_PDR_FRU_RECORD_SET, NULL, &data, &size);
+		repo, PLDM_PDR_FRU_RECORD_SET, NULL, &data, &size);
 	while (curr_record != NULL) {
 		struct pldm_pdr_fru_record_set *fru =
-		    (struct pldm_pdr_fru_record_set
-			 *)(data + sizeof(struct pldm_pdr_hdr));
+			(struct pldm_pdr_fru_record_set
+				 *)(data + sizeof(struct pldm_pdr_hdr));
 		if (fru->fru_rsi == htole16(fru_rsi)) {
 			*terminus_handle = le16toh(fru->terminus_handle);
 			*entity_type = le16toh(fru->entity_type);
 			*entity_instance_num =
-			    le16toh(fru->entity_instance_num);
+				le16toh(fru->entity_instance_num);
 			*container_id = le16toh(fru->container_id);
 			return curr_record;
 		}
 		data = NULL;
 		curr_record = pldm_pdr_find_record_by_type(
-		    repo, PLDM_PDR_FRU_RECORD_SET, curr_record, &data, &size);
+			repo, PLDM_PDR_FRU_RECORD_SET, curr_record, &data,
+			&size);
 	}
 
 	*terminus_handle = 0;
@@ -333,18 +335,19 @@
 	do {
 		if (record != NULL) {
 			struct pldm_terminus_locator_pdr *pdr =
-			    (struct pldm_terminus_locator_pdr *)out_data;
+				(struct pldm_terminus_locator_pdr *)out_data;
 			struct pldm_terminus_locator_type_mctp_eid *value =
-			    (struct pldm_terminus_locator_type_mctp_eid *)
-				pdr->terminus_locator_value;
+				(struct pldm_terminus_locator_type_mctp_eid *)
+					pdr->terminus_locator_value;
 			if (pdr->terminus_handle == terminus_handle &&
 			    pdr->tid == tid && value->eid == tl_eid) {
 				pdr->validity = valid_bit;
 				break;
 			}
 		}
-		record = pldm_pdr_find_record_by_type(
-		    repo, PLDM_TERMINUS_LOCATOR_PDR, record, &out_data, &size);
+		record = pldm_pdr_find_record_by_type(repo,
+						      PLDM_TERMINUS_LOCATOR_PDR,
+						      record, &out_data, &size);
 	} while (record);
 }
 
@@ -379,7 +382,7 @@
 pldm_entity_association_tree *pldm_entity_association_tree_init(void)
 {
 	pldm_entity_association_tree *tree =
-	    malloc(sizeof(pldm_entity_association_tree));
+		malloc(sizeof(pldm_entity_association_tree));
 	assert(tree != NULL);
 	tree->root = NULL;
 	tree->last_used_container_id = 0;
@@ -409,9 +412,9 @@
 }
 
 pldm_entity_node *pldm_entity_association_tree_add(
-    pldm_entity_association_tree *tree, pldm_entity *entity,
-    uint16_t entity_instance_number, pldm_entity_node *parent,
-    uint8_t association_type)
+	pldm_entity_association_tree *tree, pldm_entity *entity,
+	uint16_t entity_instance_number, pldm_entity_node *parent,
+	uint8_t association_type)
 {
 	assert(tree != NULL);
 	assert(entity != NULL);
@@ -436,7 +439,7 @@
 	node->parent.entity_container_id = 0;
 	node->entity.entity_type = entity->entity_type;
 	node->entity.entity_instance_num =
-	    entity_instance_number != 0xFFFF ? entity_instance_number : 1;
+		entity_instance_number != 0xFFFF ? entity_instance_number : 1;
 	node->association_type = association_type;
 
 	if (tree->root == NULL) {
@@ -449,24 +452,24 @@
 		node->parent = parent->entity;
 		node->entity.entity_container_id = next_container_id(tree);
 	} else {
-		pldm_entity_node *start =
-		    parent == NULL ? tree->root : parent->first_child;
+		pldm_entity_node *start = parent == NULL ? tree->root :
+							   parent->first_child;
 		pldm_entity_node *prev =
-		    find_insertion_at(start, entity->entity_type);
+			find_insertion_at(start, entity->entity_type);
 		assert(prev != NULL);
 		pldm_entity_node *next = prev->next_sibling;
 		if (prev->entity.entity_type == entity->entity_type) {
 			assert(prev->entity.entity_instance_num != UINT16_MAX);
 			node->entity.entity_instance_num =
-			    entity_instance_number != 0xFFFF
-				? entity_instance_number
-				: prev->entity.entity_instance_num + 1;
+				entity_instance_number != 0xFFFF ?
+					entity_instance_number :
+					prev->entity.entity_instance_num + 1;
 		}
 		prev->next_sibling = node;
 		node->parent = prev->parent;
 		node->next_sibling = next;
 		node->entity.entity_container_id =
-		    prev->entity.entity_container_id;
+			prev->entity.entity_container_id;
 	}
 	entity->entity_instance_num = node->entity.entity_instance_num;
 	entity->entity_container_id = node->entity.entity_container_id;
@@ -593,8 +596,7 @@
 	while (curr != NULL) {
 		if (node->entity_type == curr->entity.entity_type &&
 		    node->entity_instance_num ==
-			curr->entity.entity_instance_num) {
-
+			    curr->entity.entity_instance_num) {
 			return true;
 		}
 		curr = curr->next_sibling;
@@ -642,9 +644,9 @@
 			pldm_entity *entity = (pldm_entity *)start;
 			entity->entity_type = htole16(node->entity.entity_type);
 			entity->entity_instance_num =
-			    htole16(node->entity.entity_instance_num);
+				htole16(node->entity.entity_instance_num);
 			entity->entity_container_id =
-			    htole16(node->entity.entity_container_id);
+				htole16(node->entity.entity_container_id);
 			start += sizeof(pldm_entity);
 		}
 		node = node->next_sibling;
@@ -657,30 +659,33 @@
 					     pldm_pdr *repo, bool is_remote,
 					     uint16_t terminus_handle)
 {
-	uint8_t num_logical_children =
-	    pldm_entity_get_num_children(curr, PLDM_ENTITY_ASSOCIAION_LOGICAL);
-	uint8_t num_physical_children =
-	    pldm_entity_get_num_children(curr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
+	uint8_t num_logical_children = pldm_entity_get_num_children(
+		curr, PLDM_ENTITY_ASSOCIAION_LOGICAL);
+	uint8_t num_physical_children = pldm_entity_get_num_children(
+		curr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
 
 	if (num_logical_children) {
 		uint16_t logical_pdr_size =
-		    sizeof(struct pldm_pdr_hdr) + sizeof(uint16_t) +
-		    sizeof(uint8_t) + sizeof(pldm_entity) + sizeof(uint8_t) +
-		    (num_logical_children * sizeof(pldm_entity));
+			sizeof(struct pldm_pdr_hdr) + sizeof(uint16_t) +
+			sizeof(uint8_t) + sizeof(pldm_entity) +
+			sizeof(uint8_t) +
+			(num_logical_children * sizeof(pldm_entity));
 		entity_association_pdr_add_children(
-		    curr, repo, logical_pdr_size, num_logical_children,
-		    PLDM_ENTITY_ASSOCIAION_LOGICAL, is_remote, terminus_handle);
+			curr, repo, logical_pdr_size, num_logical_children,
+			PLDM_ENTITY_ASSOCIAION_LOGICAL, is_remote,
+			terminus_handle);
 	}
 
 	if (num_physical_children) {
 		uint16_t physical_pdr_size =
-		    sizeof(struct pldm_pdr_hdr) + sizeof(uint16_t) +
-		    sizeof(uint8_t) + sizeof(pldm_entity) + sizeof(uint8_t) +
-		    (num_physical_children * sizeof(pldm_entity));
+			sizeof(struct pldm_pdr_hdr) + sizeof(uint16_t) +
+			sizeof(uint8_t) + sizeof(pldm_entity) +
+			sizeof(uint8_t) +
+			(num_physical_children * sizeof(pldm_entity));
 		entity_association_pdr_add_children(
-		    curr, repo, physical_pdr_size, num_physical_children,
-		    PLDM_ENTITY_ASSOCIAION_PHYSICAL, is_remote,
-		    terminus_handle);
+			curr, repo, physical_pdr_size, num_physical_children,
+			PLDM_ENTITY_ASSOCIAION_PHYSICAL, is_remote,
+			terminus_handle);
 	}
 }
 
@@ -731,8 +736,8 @@
 }
 
 void pldm_entity_association_pdr_add_from_node(
-    pldm_entity_node *node, pldm_pdr *repo, pldm_entity **entities,
-    size_t num_entities, bool is_remote, uint16_t terminus_handle)
+	pldm_entity_node *node, pldm_pdr *repo, pldm_entity **entities,
+	size_t num_entities, bool is_remote, uint16_t terminus_handle)
 {
 	assert(repo != NULL);
 
@@ -749,7 +754,7 @@
 
 	if (tree_node->entity.entity_type == entity.entity_type &&
 	    tree_node->entity.entity_instance_num ==
-		entity.entity_instance_num) {
+		    entity.entity_instance_num) {
 		*node = tree_node;
 		return;
 	}
@@ -804,9 +809,9 @@
 			record->record_handle = ++record_handle;
 			if (record->data != NULL) {
 				struct pldm_pdr_hdr *hdr =
-				    (struct pldm_pdr_hdr *)(record->data);
+					(struct pldm_pdr_hdr *)(record->data);
 				hdr->record_handle =
-				    htole32(record->record_handle);
+					htole32(record->record_handle);
 			}
 			record = record->next;
 		}
@@ -850,9 +855,9 @@
 			record->record_handle = ++record_handle;
 			if (record->data != NULL) {
 				struct pldm_pdr_hdr *hdr =
-				    (struct pldm_pdr_hdr *)(record->data);
+					(struct pldm_pdr_hdr *)(record->data);
 				hdr->record_handle =
-				    htole32(record->record_handle);
+					htole32(record->record_handle);
 			}
 			record = record->next;
 		}
@@ -907,15 +912,15 @@
 }
 
 void pldm_entity_association_tree_copy_root(
-    pldm_entity_association_tree *org_tree,
-    pldm_entity_association_tree *new_tree)
+	pldm_entity_association_tree *org_tree,
+	pldm_entity_association_tree *new_tree)
 {
 	new_tree->last_used_container_id = org_tree->last_used_container_id;
 	entity_association_tree_copy(org_tree->root, &(new_tree->root));
 }
 
 void pldm_entity_association_tree_destroy_root(
-    pldm_entity_association_tree *tree)
+	pldm_entity_association_tree *tree)
 {
 	assert(tree != NULL);
 	entity_association_tree_destroy(tree->root);
@@ -934,39 +939,39 @@
 {
 	assert(pdr != NULL);
 	assert(pdr_len >= sizeof(struct pldm_pdr_hdr) +
-			      sizeof(struct pldm_pdr_entity_association));
+				  sizeof(struct pldm_pdr_entity_association));
 
 	struct pldm_pdr_hdr *hdr = (struct pldm_pdr_hdr *)pdr;
 	assert(hdr->type == PLDM_PDR_ENTITY_ASSOCIATION);
 
 	const uint8_t *start = (uint8_t *)pdr;
 	const uint8_t *end =
-	    start + sizeof(struct pldm_pdr_hdr) + le16toh(hdr->length);
+		start + sizeof(struct pldm_pdr_hdr) + le16toh(hdr->length);
 	start += sizeof(struct pldm_pdr_hdr);
 	struct pldm_pdr_entity_association *entity_association_pdr =
-	    (struct pldm_pdr_entity_association *)start;
+		(struct pldm_pdr_entity_association *)start;
 	*num_entities = entity_association_pdr->num_children + 1;
 	assert(*num_entities >= 2);
 	*entities = malloc(sizeof(pldm_entity) * *num_entities);
 	assert(*entities != NULL);
 	assert(start + sizeof(struct pldm_pdr_entity_association) +
-		   sizeof(pldm_entity) * (*num_entities - 2) ==
+		       sizeof(pldm_entity) * (*num_entities - 2) ==
 	       end);
 	(*entities)->entity_type =
-	    le16toh(entity_association_pdr->container.entity_type);
+		le16toh(entity_association_pdr->container.entity_type);
 	(*entities)->entity_instance_num =
-	    le16toh(entity_association_pdr->container.entity_instance_num);
+		le16toh(entity_association_pdr->container.entity_instance_num);
 	(*entities)->entity_container_id =
-	    le16toh(entity_association_pdr->container.entity_container_id);
+		le16toh(entity_association_pdr->container.entity_container_id);
 	pldm_entity *curr_entity = entity_association_pdr->children;
 	size_t i = 1;
 	while (i < *num_entities) {
 		(*entities + i)->entity_type =
-		    le16toh(curr_entity->entity_type);
+			le16toh(curr_entity->entity_type);
 		(*entities + i)->entity_instance_num =
-		    le16toh(curr_entity->entity_instance_num);
+			le16toh(curr_entity->entity_instance_num);
 		(*entities + i)->entity_container_id =
-		    le16toh(curr_entity->entity_container_id);
+			le16toh(curr_entity->entity_container_id);
 		++curr_entity;
 		++i;
 	}
diff --git a/src/platform.c b/src/platform.c
index 7292847..5da538c 100644
--- a/src/platform.c
+++ b/src/platform.c
@@ -23,10 +23,10 @@
 }
 
 int encode_state_effecter_pdr(
-    struct pldm_state_effecter_pdr *const effecter,
-    const size_t allocation_size,
-    const struct state_effecter_possible_states *const possible_states,
-    const size_t possible_states_size, size_t *const actual_size)
+	struct pldm_state_effecter_pdr *const effecter,
+	const size_t allocation_size,
+	const struct state_effecter_possible_states *const possible_states,
+	const size_t possible_states_size, size_t *const actual_size)
 {
 	// Encode possible states
 
@@ -38,13 +38,14 @@
 
 		for (int i = 0; i < effecter->composite_effecter_count; ++i) {
 			struct state_effecter_possible_states *states =
-			    (struct state_effecter_possible_states *)states_ptr;
+				(struct state_effecter_possible_states *)
+					states_ptr;
 
 			HTOLE16(states->state_set_id);
 
 			states_ptr +=
-			    (sizeof(*states) - sizeof(states->states) +
-			     states->possible_states_size);
+				(sizeof(*states) - sizeof(states->states) +
+				 states->possible_states_size);
 		}
 
 		calculated_possible_states_size = states_ptr - begin_states_ptr;
@@ -58,8 +59,8 @@
 	}
 
 	*actual_size =
-	    (sizeof(struct pldm_state_effecter_pdr) + possible_states_size -
-	     sizeof(effecter->possible_states));
+		(sizeof(struct pldm_state_effecter_pdr) + possible_states_size -
+		 sizeof(effecter->possible_states));
 
 	if (allocation_size < *actual_size) {
 		*actual_size = 0;
@@ -92,9 +93,10 @@
 }
 
 int encode_state_sensor_pdr(
-    struct pldm_state_sensor_pdr *const sensor, const size_t allocation_size,
-    const struct state_sensor_possible_states *const possible_states,
-    const size_t possible_states_size, size_t *const actual_size)
+	struct pldm_state_sensor_pdr *const sensor,
+	const size_t allocation_size,
+	const struct state_sensor_possible_states *const possible_states,
+	const size_t possible_states_size, size_t *const actual_size)
 {
 	// Encode possible states
 
@@ -106,13 +108,14 @@
 
 		for (int i = 0; i < sensor->composite_sensor_count; ++i) {
 			struct state_sensor_possible_states *states =
-			    (struct state_sensor_possible_states *)states_ptr;
+				(struct state_sensor_possible_states *)
+					states_ptr;
 
 			HTOLE16(states->state_set_id);
 
 			states_ptr +=
-			    (sizeof(*states) - sizeof(states->states) +
-			     states->possible_states_size);
+				(sizeof(*states) - sizeof(states->states) +
+				 states->possible_states_size);
 		}
 
 		calculated_possible_states_size = states_ptr - begin_states_ptr;
@@ -164,7 +167,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -195,7 +198,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -207,7 +210,7 @@
 	}
 
 	struct pldm_set_state_effecter_states_req *request =
-	    (struct pldm_set_state_effecter_states_req *)msg->payload;
+		(struct pldm_set_state_effecter_states_req *)msg->payload;
 	effecter_id = htole16(effecter_id);
 	request->effecter_id = effecter_id;
 	request->comp_effecter_count = comp_effecter_count;
@@ -323,7 +326,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -335,13 +338,13 @@
 	}
 
 	struct pldm_get_pdr_resp *response =
-	    (struct pldm_get_pdr_resp *)msg->payload;
+		(struct pldm_get_pdr_resp *)msg->payload;
 	response->completion_code = completion_code;
 
 	if (response->completion_code == PLDM_SUCCESS) {
 		response->next_record_handle = htole32(next_record_hndl);
 		response->next_data_transfer_handle =
-		    htole32(next_data_transfer_hndl);
+			htole32(next_data_transfer_hndl);
 		response->transfer_flag = transfer_flag;
 		response->response_count = htole16(resp_cnt);
 		if (record_data != NULL && resp_cnt > 0) {
@@ -349,8 +352,8 @@
 		}
 		if (transfer_flag == PLDM_END) {
 			uint8_t *dst = msg->payload;
-			dst +=
-			    (sizeof(struct pldm_get_pdr_resp) - 1) + resp_cnt;
+			dst += (sizeof(struct pldm_get_pdr_resp) - 1) +
+			       resp_cnt;
 			*dst = transfer_crc;
 		}
 	}
@@ -359,17 +362,17 @@
 }
 
 int encode_get_pdr_repository_info_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t repository_state,
-    const uint8_t *update_time, const uint8_t *oem_update_time,
-    uint32_t record_count, uint32_t repository_size,
-    uint32_t largest_record_size, uint8_t data_transfer_handle_timeout,
-    struct pldm_msg *msg)
+	uint8_t instance_id, uint8_t completion_code, uint8_t repository_state,
+	const uint8_t *update_time, const uint8_t *oem_update_time,
+	uint32_t record_count, uint32_t repository_size,
+	uint32_t largest_record_size, uint8_t data_transfer_handle_timeout,
+	struct pldm_msg *msg)
 {
 	if (msg == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -381,7 +384,7 @@
 	}
 
 	struct pldm_pdr_repository_info_resp *response =
-	    (struct pldm_pdr_repository_info_resp *)msg->payload;
+		(struct pldm_pdr_repository_info_resp *)msg->payload;
 	response->completion_code = completion_code;
 
 	if (response->completion_code == PLDM_SUCCESS) {
@@ -398,17 +401,18 @@
 		response->repository_size = htole32(repository_size);
 		response->largest_record_size = htole32(largest_record_size);
 		response->data_transfer_handle_timeout =
-		    data_transfer_handle_timeout;
+			data_transfer_handle_timeout;
 	}
 
 	return PLDM_SUCCESS;
 }
 
 int decode_get_pdr_repository_info_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *repository_state, uint8_t *update_time, uint8_t *oem_update_time,
-    uint32_t *record_count, uint32_t *repository_size,
-    uint32_t *largest_record_size, uint8_t *data_transfer_handle_timeout)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *repository_state,
+	uint8_t *update_time, uint8_t *oem_update_time, uint32_t *record_count,
+	uint32_t *repository_size, uint32_t *largest_record_size,
+	uint8_t *data_transfer_handle_timeout)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
@@ -461,7 +465,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -473,7 +477,7 @@
 	}
 
 	struct pldm_get_pdr_req *request =
-	    (struct pldm_get_pdr_req *)msg->payload;
+		(struct pldm_get_pdr_req *)msg->payload;
 	request->record_handle = htole32(record_hndl);
 	request->data_transfer_handle = htole32(data_transfer_hndl);
 	request->transfer_op_flag = transfer_op_flag;
@@ -548,9 +552,9 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	rc =
-	    pldm_msgbuf_init(buf, PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES,
-			     msg->payload, payload_length);
+	rc = pldm_msgbuf_init(buf,
+			      PLDM_SET_NUMERIC_EFFECTER_VALUE_MIN_REQ_BYTES,
+			      msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
@@ -584,7 +588,7 @@
 		return PLDM_ERROR_INVALID_LENGTH;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -600,9 +604,12 @@
 	return rc;
 }
 
-int encode_set_numeric_effecter_value_req(
-    uint8_t instance_id, uint16_t effecter_id, uint8_t effecter_data_size,
-    const uint8_t *effecter_value, struct pldm_msg *msg, size_t payload_length)
+int encode_set_numeric_effecter_value_req(uint8_t instance_id,
+					  uint16_t effecter_id,
+					  uint8_t effecter_data_size,
+					  const uint8_t *effecter_value,
+					  struct pldm_msg *msg,
+					  size_t payload_length)
 {
 	if (msg == NULL || effecter_value == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -612,7 +619,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -624,7 +631,7 @@
 	}
 
 	struct pldm_set_numeric_effecter_value_req *request =
-	    (struct pldm_set_numeric_effecter_value_req *)msg->payload;
+		(struct pldm_set_numeric_effecter_value_req *)msg->payload;
 	if (effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT8 ||
 	    effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT8) {
 		if (payload_length !=
@@ -692,7 +699,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -704,7 +711,7 @@
 	}
 
 	struct pldm_get_state_sensor_readings_resp *response =
-	    (struct pldm_get_state_sensor_readings_resp *)msg->payload;
+		(struct pldm_get_state_sensor_readings_resp *)msg->payload;
 
 	response->completion_code = completion_code;
 	response->comp_sensor_count = comp_sensor_count;
@@ -723,7 +730,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -735,7 +742,7 @@
 	}
 
 	struct pldm_get_state_sensor_readings_req *request =
-	    (struct pldm_get_state_sensor_readings_req *)msg->payload;
+		(struct pldm_get_state_sensor_readings_req *)msg->payload;
 
 	request->sensor_id = htole16(sensor_id);
 	request->reserved = reserved;
@@ -760,9 +767,9 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	rc =
-	    pldm_msgbuf_init(buf, PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES,
-			     msg->payload, payload_length);
+	rc = pldm_msgbuf_init(buf,
+			      PLDM_GET_STATE_SENSOR_READINGS_MIN_RESP_BYTES,
+			      msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
@@ -823,15 +830,16 @@
 }
 
 int encode_sensor_event_data(
-    struct pldm_sensor_event_data *const event_data,
-    const size_t event_data_size, const uint16_t sensor_id,
-    const enum sensor_event_class_states sensor_event_class,
-    const uint8_t sensor_offset, const uint8_t event_state,
-    const uint8_t previous_event_state, size_t *const actual_event_data_size)
+	struct pldm_sensor_event_data *const event_data,
+	const size_t event_data_size, const uint16_t sensor_id,
+	const enum sensor_event_class_states sensor_event_class,
+	const uint8_t sensor_offset, const uint8_t event_state,
+	const uint8_t previous_event_state,
+	size_t *const actual_event_data_size)
 {
 	*actual_event_data_size =
-	    (sizeof(*event_data) - sizeof(event_data->event_class) +
-	     sizeof(struct pldm_sensor_event_state_sensor_state));
+		(sizeof(*event_data) - sizeof(event_data->event_class) +
+		 sizeof(struct pldm_sensor_event_state_sensor_state));
 
 	if (!event_data) {
 		return PLDM_SUCCESS;
@@ -846,8 +854,8 @@
 	event_data->sensor_event_class_type = sensor_event_class;
 
 	struct pldm_sensor_event_state_sensor_state *const state_data =
-	    (struct pldm_sensor_event_state_sensor_state *)
-		event_data->event_class;
+		(struct pldm_sensor_event_state_sensor_state *)
+			event_data->event_class;
 
 	state_data->sensor_offset = sensor_offset;
 	state_data->event_state = event_state;
@@ -881,15 +889,15 @@
 	pldm_msgbuf_extract(buf, tid);
 	pldm_msgbuf_extract(buf, event_class);
 	*event_data_offset =
-	    sizeof(*format_version) + sizeof(*tid) + sizeof(*event_class);
+		sizeof(*format_version) + sizeof(*tid) + sizeof(*event_class);
 
 	return pldm_msgbuf_destroy(buf);
 }
 
 int decode_poll_for_platform_event_message_req(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *format_version,
-    uint8_t *transfer_operation_flag, uint32_t *data_transfer_handle,
-    uint16_t *event_id_to_acknowledge)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *format_version, uint8_t *transfer_operation_flag,
+	uint32_t *data_transfer_handle, uint16_t *event_id_to_acknowledge)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
@@ -945,7 +953,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -957,7 +965,7 @@
 	}
 
 	struct pldm_platform_event_message_resp *response =
-	    (struct pldm_platform_event_message_resp *)msg->payload;
+		(struct pldm_platform_event_message_resp *)msg->payload;
 	response->completion_code = completion_code;
 	response->platform_event_status = platform_event_status;
 
@@ -965,11 +973,11 @@
 }
 
 int encode_poll_for_platform_event_message_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t tid,
-    uint16_t event_id, uint32_t next_data_transfer_handle,
-    uint8_t transfer_flag, uint8_t event_class, uint32_t event_data_size,
-    uint8_t *event_data, uint32_t checksum, struct pldm_msg *msg,
-    size_t payload_length)
+	uint8_t instance_id, uint8_t completion_code, uint8_t tid,
+	uint16_t event_id, uint32_t next_data_transfer_handle,
+	uint8_t transfer_flag, uint8_t event_class, uint32_t event_data_size,
+	uint8_t *event_data, uint32_t checksum, struct pldm_msg *msg,
+	size_t payload_length)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
@@ -979,7 +987,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -991,8 +999,8 @@
 	}
 
 	rc = pldm_msgbuf_init(
-	    buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
-	    msg->payload, payload_length);
+		buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
+		msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
@@ -1030,9 +1038,9 @@
 }
 
 int encode_platform_event_message_req(
-    uint8_t instance_id, uint8_t format_version, uint8_t tid,
-    uint8_t event_class, const uint8_t *event_data, size_t event_data_length,
-    struct pldm_msg *msg, size_t payload_length)
+	uint8_t instance_id, uint8_t format_version, uint8_t tid,
+	uint8_t event_class, const uint8_t *event_data,
+	size_t event_data_length, struct pldm_msg *msg, size_t payload_length)
 
 {
 	if (format_version != 1) {
@@ -1057,7 +1065,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -1069,7 +1077,7 @@
 	}
 
 	struct pldm_platform_event_message_req *request =
-	    (struct pldm_platform_event_message_req *)msg->payload;
+		(struct pldm_platform_event_message_req *)msg->payload;
 	request->format_version = format_version;
 	request->tid = tid;
 	request->event_class = event_class;
@@ -1119,11 +1127,11 @@
 	return pldm_msgbuf_destroy(buf);
 }
 
-int encode_event_message_buffer_size_req(
-    uint8_t instance_id, uint16_t event_receiver_max_buffer_size,
-    struct pldm_msg *msg)
+int encode_event_message_buffer_size_req(uint8_t instance_id,
+					 uint16_t event_receiver_max_buffer_size,
+					 struct pldm_msg *msg)
 {
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -1135,9 +1143,9 @@
 	}
 
 	struct pldm_event_message_buffer_size_req *request =
-	    (struct pldm_event_message_buffer_size_req *)msg->payload;
+		(struct pldm_event_message_buffer_size_req *)msg->payload;
 	request->event_receiver_max_buffer_size =
-	    event_receiver_max_buffer_size;
+		event_receiver_max_buffer_size;
 
 	return PLDM_SUCCESS;
 }
@@ -1188,7 +1196,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -1200,17 +1208,20 @@
 	}
 
 	struct pldm_event_message_supported_req *request =
-	    (struct pldm_event_message_supported_req *)msg->payload;
+		(struct pldm_event_message_supported_req *)msg->payload;
 	request->format_version = format_version;
 
 	return PLDM_SUCCESS;
 }
 
-int decode_event_message_supported_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *synchrony_config, bitfield8_t *synchrony_config_support,
-    uint8_t *number_event_class_returned, uint8_t *event_class,
-    uint8_t event_class_count)
+int decode_event_message_supported_resp(const struct pldm_msg *msg,
+					size_t payload_length,
+					uint8_t *completion_code,
+					uint8_t *synchrony_config,
+					bitfield8_t *synchrony_config_support,
+					uint8_t *number_event_class_returned,
+					uint8_t *event_class,
+					uint8_t event_class_count)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
@@ -1285,7 +1296,7 @@
 	}
 
 	size_t event_class_data_length =
-	    event_data_length - PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES;
+		event_data_length - PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES;
 
 	pldm_msgbuf_extract(buf, sensor_id);
 	rc = pldm_msgbuf_extract(buf, sensor_event_class_type);
@@ -1305,9 +1316,9 @@
 		}
 	} else if (*sensor_event_class_type == PLDM_NUMERIC_SENSOR_STATE) {
 		if (event_class_data_length <
-			PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH ||
+			    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH ||
 		    event_class_data_length >
-			PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH) {
+			    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MAX_DATA_LENGTH) {
 			return PLDM_ERROR_INVALID_LENGTH;
 		}
 	} else {
@@ -1315,7 +1326,7 @@
 	}
 
 	*event_class_data_offset =
-	    sizeof(*sensor_id) + sizeof(*sensor_event_class_type);
+		sizeof(*sensor_id) + sizeof(*sensor_event_class_type);
 
 	return pldm_msgbuf_destroy(buf);
 }
@@ -1331,9 +1342,9 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	rc =
-	    pldm_msgbuf_init(buf, PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH,
-			     sensor_data, sensor_data_length);
+	rc = pldm_msgbuf_init(buf,
+			      PLDM_SENSOR_EVENT_SENSOR_OP_STATE_DATA_LENGTH,
+			      sensor_data, sensor_data_length);
 	if (rc) {
 		return rc;
 	}
@@ -1393,8 +1404,8 @@
 	}
 
 	rc = pldm_msgbuf_init(
-	    buf, PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH,
-	    sensor_data, sensor_data_length);
+		buf, PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_MIN_DATA_LENGTH,
+		sensor_data, sensor_data_length);
 	if (rc) {
 		return rc;
 	}
@@ -1463,8 +1474,8 @@
 
 #define PLDM_NUMERIC_SENSOR_VALUE_PDR_MIN_SIZE 69
 int decode_numeric_sensor_pdr_data(
-    const void *pdr_data, size_t pdr_data_length,
-    struct pldm_numeric_sensor_value_pdr *pdr_value)
+	const void *pdr_data, size_t pdr_data_length,
+	struct pldm_numeric_sensor_value_pdr *pdr_value)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
@@ -1482,8 +1493,8 @@
 	}
 
 	rc = pldm_platform_pdr_hdr_validate(
-	    &pdr_value->hdr, PLDM_NUMERIC_SENSOR_VALUE_PDR_MIN_SIZE,
-	    pdr_data_length);
+		&pdr_value->hdr, PLDM_NUMERIC_SENSOR_VALUE_PDR_MIN_SIZE,
+		pdr_data_length);
 	if (rc) {
 		return rc;
 	}
@@ -1523,7 +1534,7 @@
 					&pdr_value->hysteresis);
 	pldm_msgbuf_extract(buf, &pdr_value->supported_thresholds.byte);
 	pldm_msgbuf_extract(
-	    buf, &pdr_value->threshold_and_hysteresis_volatility.byte);
+		buf, &pdr_value->threshold_and_hysteresis_volatility.byte);
 	pldm_msgbuf_extract(buf, &pdr_value->state_transition_interval);
 	pldm_msgbuf_extract(buf, &pdr_value->update_interval);
 	pldm_msgbuf_extract_sensor_data(buf, pdr_value->sensor_data_size,
@@ -1541,23 +1552,23 @@
 
 	pldm_msgbuf_extract(buf, &pdr_value->range_field_support.byte);
 	pldm_msgbuf_extract_range_field_format(
-	    buf, pdr_value->range_field_format, &pdr_value->nominal_value);
+		buf, pdr_value->range_field_format, &pdr_value->nominal_value);
 	pldm_msgbuf_extract_range_field_format(
-	    buf, pdr_value->range_field_format, &pdr_value->normal_max);
+		buf, pdr_value->range_field_format, &pdr_value->normal_max);
 	pldm_msgbuf_extract_range_field_format(
-	    buf, pdr_value->range_field_format, &pdr_value->normal_min);
+		buf, pdr_value->range_field_format, &pdr_value->normal_min);
 	pldm_msgbuf_extract_range_field_format(
-	    buf, pdr_value->range_field_format, &pdr_value->warning_high);
+		buf, pdr_value->range_field_format, &pdr_value->warning_high);
 	pldm_msgbuf_extract_range_field_format(
-	    buf, pdr_value->range_field_format, &pdr_value->warning_low);
+		buf, pdr_value->range_field_format, &pdr_value->warning_low);
 	pldm_msgbuf_extract_range_field_format(
-	    buf, pdr_value->range_field_format, &pdr_value->critical_high);
+		buf, pdr_value->range_field_format, &pdr_value->critical_high);
 	pldm_msgbuf_extract_range_field_format(
-	    buf, pdr_value->range_field_format, &pdr_value->critical_low);
+		buf, pdr_value->range_field_format, &pdr_value->critical_low);
 	pldm_msgbuf_extract_range_field_format(
-	    buf, pdr_value->range_field_format, &pdr_value->fatal_high);
+		buf, pdr_value->range_field_format, &pdr_value->fatal_high);
 	pldm_msgbuf_extract_range_field_format(
-	    buf, pdr_value->range_field_format, &pdr_value->fatal_low);
+		buf, pdr_value->range_field_format, &pdr_value->fatal_low);
 
 	return pldm_msgbuf_destroy(buf);
 }
@@ -1570,7 +1581,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -1582,16 +1593,17 @@
 	}
 
 	struct pldm_get_numeric_effecter_value_req *request =
-	    (struct pldm_get_numeric_effecter_value_req *)msg->payload;
+		(struct pldm_get_numeric_effecter_value_req *)msg->payload;
 	request->effecter_id = htole16(effecter_id);
 
 	return PLDM_SUCCESS;
 }
 
 int encode_get_numeric_effecter_value_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t effecter_data_size,
-    uint8_t effecter_oper_state, const uint8_t *pending_value,
-    const uint8_t *present_value, struct pldm_msg *msg, size_t payload_length)
+	uint8_t instance_id, uint8_t completion_code,
+	uint8_t effecter_data_size, uint8_t effecter_oper_state,
+	const uint8_t *pending_value, const uint8_t *present_value,
+	struct pldm_msg *msg, size_t payload_length)
 {
 	if (msg == NULL || pending_value == NULL || present_value == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -1605,7 +1617,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -1617,7 +1629,7 @@
 	}
 
 	struct pldm_get_numeric_effecter_value_resp *response =
-	    (struct pldm_get_numeric_effecter_value_resp *)msg->payload;
+		(struct pldm_get_numeric_effecter_value_resp *)msg->payload;
 
 	response->completion_code = completion_code;
 	response->effecter_data_size = effecter_data_size;
@@ -1644,9 +1656,9 @@
 		       sizeof(uint16_t));
 		uint16_t val_present = *(uint16_t *)present_value;
 		val_present = htole16(val_present);
-		memcpy(
-		    (response->pending_and_present_values + sizeof(uint16_t)),
-		    &val_present, sizeof(uint16_t));
+		memcpy((response->pending_and_present_values +
+			sizeof(uint16_t)),
+		       &val_present, sizeof(uint16_t));
 
 	} else if (effecter_data_size == PLDM_EFFECTER_DATA_SIZE_UINT32 ||
 		   effecter_data_size == PLDM_EFFECTER_DATA_SIZE_SINT32) {
@@ -1660,9 +1672,9 @@
 		       sizeof(uint32_t));
 		uint32_t val_present = *(uint32_t *)present_value;
 		val_present = htole32(val_present);
-		memcpy(
-		    (response->pending_and_present_values + sizeof(uint32_t)),
-		    &val_present, sizeof(uint32_t));
+		memcpy((response->pending_and_present_values +
+			sizeof(uint32_t)),
+		       &val_present, sizeof(uint32_t));
 	}
 	return PLDM_SUCCESS;
 }
@@ -1690,10 +1702,13 @@
 	return pldm_msgbuf_destroy_consumed(buf);
 }
 
-int decode_get_numeric_effecter_value_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *effecter_data_size, uint8_t *effecter_oper_state,
-    uint8_t *pending_value, uint8_t *present_value)
+int decode_get_numeric_effecter_value_resp(const struct pldm_msg *msg,
+					   size_t payload_length,
+					   uint8_t *completion_code,
+					   uint8_t *effecter_data_size,
+					   uint8_t *effecter_oper_state,
+					   uint8_t *pending_value,
+					   uint8_t *present_value)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
@@ -1748,12 +1763,12 @@
 }
 
 int encode_pldm_pdr_repository_chg_event_data(
-    uint8_t event_data_format, uint8_t number_of_change_records,
-    const uint8_t *event_data_operations,
-    const uint8_t *numbers_of_change_entries,
-    const uint32_t *const *change_entries,
-    struct pldm_pdr_repository_chg_event_data *event_data,
-    size_t *actual_change_records_size, size_t max_change_records_size)
+	uint8_t event_data_format, uint8_t number_of_change_records,
+	const uint8_t *event_data_operations,
+	const uint8_t *numbers_of_change_entries,
+	const uint32_t *const *change_entries,
+	struct pldm_pdr_repository_chg_event_data *event_data,
+	size_t *actual_change_records_size, size_t max_change_records_size)
 {
 	if (event_data_operations == NULL ||
 	    numbers_of_change_entries == NULL || change_entries == NULL) {
@@ -1761,16 +1776,16 @@
 	}
 
 	size_t expected_size =
-	    sizeof(event_data_format) + sizeof(number_of_change_records);
+		sizeof(event_data_format) + sizeof(number_of_change_records);
 
 	expected_size +=
-	    sizeof(*event_data_operations) * number_of_change_records;
+		sizeof(*event_data_operations) * number_of_change_records;
 	expected_size +=
-	    sizeof(*numbers_of_change_entries) * number_of_change_records;
+		sizeof(*numbers_of_change_entries) * number_of_change_records;
 
 	for (uint8_t i = 0; i < number_of_change_records; ++i) {
-		expected_size +=
-		    sizeof(*change_entries[0]) * numbers_of_change_entries[i];
+		expected_size += sizeof(*change_entries[0]) *
+				 numbers_of_change_entries[i];
 	}
 
 	*actual_change_records_size = expected_size;
@@ -1787,23 +1802,24 @@
 	event_data->number_of_change_records = number_of_change_records;
 
 	struct pldm_pdr_repository_change_record_data *record_data =
-	    (struct pldm_pdr_repository_change_record_data *)
-		event_data->change_records;
+		(struct pldm_pdr_repository_change_record_data *)
+			event_data->change_records;
 
 	for (uint8_t i = 0; i < number_of_change_records; ++i) {
 		record_data->event_data_operation = event_data_operations[i];
 		record_data->number_of_change_entries =
-		    numbers_of_change_entries[i];
+			numbers_of_change_entries[i];
 
 		for (uint8_t j = 0; j < record_data->number_of_change_entries;
 		     ++j) {
 			record_data->change_entry[j] =
-			    htole32(change_entries[i][j]);
+				htole32(change_entries[i][j]);
 		}
 
-		record_data = (struct pldm_pdr_repository_change_record_data
-				   *)(record_data->change_entry +
-				      record_data->number_of_change_entries);
+		record_data =
+			(struct pldm_pdr_repository_change_record_data
+				 *)(record_data->change_entry +
+				    record_data->number_of_change_entries);
 	}
 
 	return PLDM_SUCCESS;
@@ -1834,15 +1850,15 @@
 	pldm_msgbuf_extract(buf, number_of_change_records);
 
 	*change_record_data_offset =
-	    sizeof(*event_data_format) + sizeof(*number_of_change_records);
+		sizeof(*event_data_format) + sizeof(*number_of_change_records);
 
 	return pldm_msgbuf_destroy(buf);
 }
 
 int decode_pldm_pdr_repository_change_record_data(
-    const uint8_t *change_record_data, size_t change_record_data_size,
-    uint8_t *event_data_operation, uint8_t *number_of_change_entries,
-    size_t *change_entry_data_offset)
+	const uint8_t *change_record_data, size_t change_record_data_size,
+	uint8_t *event_data_operation, uint8_t *number_of_change_entries,
+	size_t *change_entry_data_offset)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
@@ -1862,8 +1878,8 @@
 	pldm_msgbuf_extract(buf, event_data_operation);
 	pldm_msgbuf_extract(buf, number_of_change_entries);
 
-	*change_entry_data_offset =
-	    sizeof(*event_data_operation) + sizeof(*number_of_change_entries);
+	*change_entry_data_offset = sizeof(*event_data_operation) +
+				    sizeof(*number_of_change_entries);
 
 	return pldm_msgbuf_destroy(buf);
 }
@@ -1876,7 +1892,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -1888,7 +1904,7 @@
 	}
 
 	struct pldm_get_sensor_reading_req *request =
-	    (struct pldm_get_sensor_reading_req *)msg->payload;
+		(struct pldm_get_sensor_reading_req *)msg->payload;
 
 	request->sensor_id = htole16(sensor_id);
 	request->rearm_event_state = rearm_event_state;
@@ -1897,10 +1913,11 @@
 }
 
 int decode_get_sensor_reading_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *sensor_data_size, uint8_t *sensor_operational_state,
-    uint8_t *sensor_event_message_enable, uint8_t *present_state,
-    uint8_t *previous_state, uint8_t *event_state, uint8_t *present_reading)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *sensor_data_size,
+	uint8_t *sensor_operational_state, uint8_t *sensor_event_message_enable,
+	uint8_t *present_state, uint8_t *previous_state, uint8_t *event_state,
+	uint8_t *present_reading)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
@@ -1950,11 +1967,14 @@
 	return pldm_msgbuf_destroy_consumed(buf);
 }
 
-int encode_get_sensor_reading_resp(
-    uint8_t instance_id, uint8_t completion_code, uint8_t sensor_data_size,
-    uint8_t sensor_operational_state, uint8_t sensor_event_message_enable,
-    uint8_t present_state, uint8_t previous_state, uint8_t event_state,
-    const uint8_t *present_reading, struct pldm_msg *msg, size_t payload_length)
+int encode_get_sensor_reading_resp(uint8_t instance_id, uint8_t completion_code,
+				   uint8_t sensor_data_size,
+				   uint8_t sensor_operational_state,
+				   uint8_t sensor_event_message_enable,
+				   uint8_t present_state,
+				   uint8_t previous_state, uint8_t event_state,
+				   const uint8_t *present_reading,
+				   struct pldm_msg *msg, size_t payload_length)
 {
 	if (msg == NULL || present_reading == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -1964,7 +1984,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_RESPONSE;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -1976,7 +1996,7 @@
 	}
 
 	struct pldm_get_sensor_reading_resp *response =
-	    (struct pldm_get_sensor_reading_resp *)msg->payload;
+		(struct pldm_get_sensor_reading_resp *)msg->payload;
 
 	response->completion_code = completion_code;
 	response->sensor_data_size = sensor_data_size;
@@ -2056,7 +2076,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -2068,7 +2088,7 @@
 	}
 
 	struct pldm_set_event_receiver_req *request =
-	    (struct pldm_set_event_receiver_req *)msg->payload;
+		(struct pldm_set_event_receiver_req *)msg->payload;
 	request->event_message_global_enable = event_message_global_enable;
 
 	request->transport_protocol_type = transport_protocol_type;
@@ -2159,7 +2179,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.instance = instance_id;
 	header.msg_type = PLDM_RESPONSE;
 	header.pldm_type = PLDM_PLATFORM;
@@ -2191,7 +2211,7 @@
 		return PLDM_ERROR_INVALID_DATA;
 	}
 
-	struct pldm_header_info header = {0};
+	struct pldm_header_info header = { 0 };
 	header.msg_type = PLDM_REQUEST;
 	header.instance = instance_id;
 	header.pldm_type = PLDM_PLATFORM;
@@ -2203,8 +2223,8 @@
 	}
 
 	rc = pldm_msgbuf_init(
-	    buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
-	    msg->payload, payload_length);
+		buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
+		msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
@@ -2218,10 +2238,11 @@
 }
 
 int decode_poll_for_platform_event_message_resp(
-    const struct pldm_msg *msg, size_t payload_length, uint8_t *completion_code,
-    uint8_t *tid, uint16_t *event_id, uint32_t *next_data_transfer_handle,
-    uint8_t *transfer_flag, uint8_t *event_class, uint32_t *event_data_size,
-    void **event_data, uint32_t *event_data_integrity_checksum)
+	const struct pldm_msg *msg, size_t payload_length,
+	uint8_t *completion_code, uint8_t *tid, uint16_t *event_id,
+	uint32_t *next_data_transfer_handle, uint8_t *transfer_flag,
+	uint8_t *event_class, uint32_t *event_data_size, void **event_data,
+	uint32_t *event_data_integrity_checksum)
 {
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
@@ -2236,8 +2257,8 @@
 	}
 
 	rc = pldm_msgbuf_init(
-	    buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
-	    msg->payload, payload_length);
+		buf, PLDM_POLL_FOR_PLATFORM_EVENT_MESSAGE_MIN_RESP_BYTES,
+		msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
diff --git a/src/requester/instance-id.c b/src/requester/instance-id.c
index 7fe7c86..82e3ed1 100644
--- a/src/requester/instance-id.c
+++ b/src/requester/instance-id.c
@@ -10,7 +10,7 @@
 
 #define BIT(i) (1UL << (i))
 
-#define PLDM_TID_MAX 256
+#define PLDM_TID_MAX	 256
 #define PLDM_INST_ID_MAX 32
 
 /* We need to track our allocations explicitly due to OFD lock merging/splitting
@@ -98,14 +98,14 @@
 			   pldm_instance_id_t *iid)
 {
 	static const struct flock cfls = {
-	    .l_type = F_RDLCK,
-	    .l_whence = SEEK_SET,
-	    .l_len = 1,
+		.l_type = F_RDLCK,
+		.l_whence = SEEK_SET,
+		.l_len = 1,
 	};
 	static const struct flock cflx = {
-	    .l_type = F_WRLCK,
-	    .l_whence = SEEK_SET,
-	    .l_len = 1,
+		.l_type = F_WRLCK,
+		.l_whence = SEEK_SET,
+		.l_len = 1,
 	};
 	uint8_t l_iid;
 
@@ -186,9 +186,9 @@
 			  pldm_instance_id_t iid)
 {
 	static const struct flock cflu = {
-	    .l_type = F_UNLCK,
-	    .l_whence = SEEK_SET,
-	    .l_len = 1,
+		.l_type = F_UNLCK,
+		.l_whence = SEEK_SET,
+		.l_len = 1,
 	};
 	struct flock flop;
 	int rc;
diff --git a/src/requester/pldm.c b/src/requester/pldm.c
index c78512f..973f194 100644
--- a/src/requester/pldm.c
+++ b/src/requester/pldm.c
@@ -50,39 +50,39 @@
 /* This macro does the setup and teardown required for the old API to use the
  * new API. Since the setup/teardown logic is the same for all four send/recv
  * functions, it makes sense to only define it once. */
-#define PLDM_REQ_FN(eid, fd, fn, ...)                                          \
-	do {                                                                   \
-		struct pldm_transport_mctp_demux *demux;                       \
-		bool using_open_transport = false;                             \
-		pldm_requester_rc_t rc;                                        \
-		pldm_tid_t tid = 1;                                            \
-		struct pldm_transport *ctx;                                    \
+#define PLDM_REQ_FN(eid, fd, fn, ...)                                            \
+	do {                                                                     \
+		struct pldm_transport_mctp_demux *demux;                         \
+		bool using_open_transport = false;                               \
+		pldm_requester_rc_t rc;                                          \
+		pldm_tid_t tid = 1;                                              \
+		struct pldm_transport *ctx;                                      \
 		/* The fd can be for a socket we opened or one the consumer    \
-		 * opened. */                                                  \
-		if (open_transport &&                                          \
-		    mctp_fd == pldm_transport_mctp_demux_get_socket_fd(        \
-				   open_transport)) {                          \
-			using_open_transport = true;                           \
-			demux = open_transport;                                \
-		} else {                                                       \
-			demux = pldm_transport_mctp_demux_init_with_fd(fd);    \
-			if (!demux) {                                          \
-				rc = PLDM_REQUESTER_OPEN_FAIL;                 \
-				goto transport_out;                            \
-			}                                                      \
-		}                                                              \
-		ctx = pldm_transport_mctp_demux_core(demux);                   \
-		rc = pldm_transport_mctp_demux_map_tid(demux, tid, eid);       \
-		if (rc) {                                                      \
-			rc = PLDM_REQUESTER_OPEN_FAIL;                         \
-			goto transport_out;                                    \
-		}                                                              \
-		rc = fn(ctx, tid, __VA_ARGS__);                                \
-	transport_out:                                                         \
-		if (!using_open_transport) {                                   \
-			pldm_transport_mctp_demux_destroy(demux);              \
-		}                                                              \
-		return rc;                                                     \
+		 * opened. */ \
+		if (open_transport &&                                            \
+		    mctp_fd == pldm_transport_mctp_demux_get_socket_fd(          \
+				       open_transport)) {                        \
+			using_open_transport = true;                             \
+			demux = open_transport;                                  \
+		} else {                                                         \
+			demux = pldm_transport_mctp_demux_init_with_fd(fd);      \
+			if (!demux) {                                            \
+				rc = PLDM_REQUESTER_OPEN_FAIL;                   \
+				goto transport_out;                              \
+			}                                                        \
+		}                                                                \
+		ctx = pldm_transport_mctp_demux_core(demux);                     \
+		rc = pldm_transport_mctp_demux_map_tid(demux, tid, eid);         \
+		if (rc) {                                                        \
+			rc = PLDM_REQUESTER_OPEN_FAIL;                           \
+			goto transport_out;                                      \
+		}                                                                \
+		rc = fn(ctx, tid, __VA_ARGS__);                                  \
+	transport_out:                                                           \
+		if (!using_open_transport) {                                     \
+			pldm_transport_mctp_demux_destroy(demux);                \
+		}                                                                \
+		return rc;                                                       \
 	} while (0)
 
 pldm_requester_rc_t pldm_recv_any(mctp_eid_t eid, int mctp_fd,
@@ -97,7 +97,7 @@
 			      uint8_t **pldm_resp_msg, size_t *resp_msg_len)
 {
 	pldm_requester_rc_t rc =
-	    pldm_recv_any(eid, mctp_fd, pldm_resp_msg, resp_msg_len);
+		pldm_recv_any(eid, mctp_fd, pldm_resp_msg, resp_msg_len);
 	struct pldm_msg_hdr *hdr = (struct pldm_msg_hdr *)(*pldm_resp_msg);
 	if (hdr->instance_id != instance_id) {
 		free(*pldm_resp_msg);
@@ -125,7 +125,7 @@
 
 /* Adding this here for completeness in the case we can't smoothly
  * transition apps over to the new api */
-void pldm_close()
+void pldm_close(void)
 {
 	if (open_transport) {
 		pldm_transport_mctp_demux_destroy(open_transport);
diff --git a/src/transport/af-mctp.c b/src/transport/af-mctp.c
index 21d2c72..f499a72 100644
--- a/src/transport/af-mctp.c
+++ b/src/transport/af-mctp.c
@@ -108,7 +108,7 @@
 		return PLDM_REQUESTER_SEND_FAIL;
 	}
 
-	struct sockaddr_mctp addr = {0};
+	struct sockaddr_mctp addr = { 0 };
 	addr.smctp_family = AF_MCTP;
 	addr.smctp_addr.s_addr = eid;
 	addr.smctp_type = MCTP_MSG_TYPE_PLDM;
@@ -129,7 +129,7 @@
 	}
 
 	struct pldm_transport_af_mctp *af_mctp =
-	    calloc(1, sizeof(struct pldm_transport_af_mctp));
+		calloc(1, sizeof(struct pldm_transport_af_mctp));
 	if (!af_mctp) {
 		return -ENOMEM;
 	}
diff --git a/src/transport/mctp-demux.c b/src/transport/mctp-demux.c
index 4b56f2f..4769827 100644
--- a/src/transport/mctp-demux.c
+++ b/src/transport/mctp-demux.c
@@ -113,8 +113,8 @@
 		return PLDM_REQUESTER_RECV_FAIL;
 	}
 
-	ssize_t min_len =
-	    sizeof(eid) + sizeof(mctp_msg_type) + sizeof(struct pldm_msg_hdr);
+	ssize_t min_len = sizeof(eid) + sizeof(mctp_msg_type) +
+			  sizeof(struct pldm_msg_hdr);
 	ssize_t length = recv(demux->socket, NULL, 0, MSG_PEEK | MSG_TRUNC);
 	if (length <= 0) {
 		return PLDM_REQUESTER_RECV_FAIL;
@@ -141,7 +141,7 @@
 	}
 	iov[1].iov_len = pldm_len;
 	iov[1].iov_base = *pldm_resp_msg;
-	struct msghdr msg = {0};
+	struct msghdr msg = { 0 };
 	msg.msg_iov = iov;
 	msg.msg_iovlen = sizeof(iov) / sizeof(iov[0]);
 	ssize_t bytes = recvmsg(demux->socket, &msg, 0);
@@ -169,7 +169,7 @@
 		return PLDM_REQUESTER_SEND_FAIL;
 	}
 
-	uint8_t hdr[2] = {eid, mctp_msg_type};
+	uint8_t hdr[2] = { eid, mctp_msg_type };
 
 	struct iovec iov[2];
 	iov[0].iov_base = hdr;
@@ -177,7 +177,7 @@
 	iov[1].iov_base = (uint8_t *)pldm_req_msg;
 	iov[1].iov_len = req_msg_len;
 
-	struct msghdr msg = {0};
+	struct msghdr msg = { 0 };
 	msg.msg_iov = iov;
 	msg.msg_iovlen = sizeof(iov) / sizeof(iov[0]);
 
@@ -195,7 +195,7 @@
 	}
 
 	struct pldm_transport_mctp_demux *demux =
-	    calloc(1, sizeof(struct pldm_transport_mctp_demux));
+		calloc(1, sizeof(struct pldm_transport_mctp_demux));
 	if (!demux) {
 		return -ENOMEM;
 	}
@@ -228,7 +228,7 @@
 pldm_transport_mctp_demux_init_with_fd(int mctp_fd)
 {
 	struct pldm_transport_mctp_demux *demux =
-	    calloc(1, sizeof(struct pldm_transport_mctp_demux));
+		calloc(1, sizeof(struct pldm_transport_mctp_demux));
 	if (!demux) {
 		return NULL;
 	}
@@ -250,7 +250,7 @@
 }
 
 int pldm_transport_mctp_demux_get_socket_fd(
-    struct pldm_transport_mctp_demux *ctx)
+	struct pldm_transport_mctp_demux *ctx)
 {
 	if (ctx && ctx->socket) {
 		return ctx->socket;
diff --git a/src/transport/transport.c b/src/transport/transport.c
index 0681e23..c8be844 100644
--- a/src/transport/transport.c
+++ b/src/transport/transport.c
@@ -76,7 +76,7 @@
 	}
 
 	pldm_requester_rc_t rc =
-	    transport->recv(transport, tid, pldm_resp_msg, resp_msg_len);
+		transport->recv(transport, tid, pldm_resp_msg, resp_msg_len);
 	if (rc != PLDM_REQUESTER_SUCCESS) {
 		return rc;
 	}
@@ -108,8 +108,8 @@
 		return PLDM_REQUESTER_INVALID_SETUP;
 	}
 
-	pldm_requester_rc_t rc =
-	    pldm_transport_send_msg(transport, tid, pldm_req_msg, req_msg_len);
+	pldm_requester_rc_t rc = pldm_transport_send_msg(
+		transport, tid, pldm_req_msg, req_msg_len);
 	if (rc != PLDM_REQUESTER_SUCCESS) {
 		return rc;
 	}
diff --git a/src/utils.c b/src/utils.c
index fb3553d..6fe93d1 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -11,75 +11,77 @@
  *
  */
 static uint32_t crc32_tab[] = {
-    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
-    0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-    0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
-    0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
-    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-    0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
-    0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
-    0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
-    0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
-    0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-    0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
-    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
-    0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-    0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
-    0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
-    0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-    0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
-    0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
-    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-    0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
-    0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
-    0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
-    0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
-    0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-    0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
-    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
-    0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-    0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
-    0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
-    0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-    0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d};
+	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
+	0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
+	0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+	0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
+	0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
+	0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
+	0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
+	0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+	0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
+	0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
+	0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
+	0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
+	0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+	0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
+	0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
+	0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
+	0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
+	0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+	0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
+	0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
+	0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
+	0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
+};
 
 /* 0x07(polynomial: x8+x2+x1+1)
  */
 static const uint8_t crc8_table[] = {
-    0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31,
-    0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,
-    0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9,
-    0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
-    0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1,
-    0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2,
-    0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe,
-    0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
-    0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16,
-    0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42,
-    0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80,
-    0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
-    0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8,
-    0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,
-    0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10,
-    0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
-    0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f,
-    0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b,
-    0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7,
-    0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
-    0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef,
-    0xfa, 0xfd, 0xf4, 0xf3};
+	0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31,
+	0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,
+	0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9,
+	0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
+	0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1,
+	0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2,
+	0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe,
+	0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
+	0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16,
+	0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42,
+	0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80,
+	0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
+	0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8,
+	0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,
+	0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10,
+	0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
+	0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f,
+	0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b,
+	0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7,
+	0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
+	0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef,
+	0xfa, 0xfd, 0xf4, 0xf3
+};
 
 uint32_t crc32(const void *data, size_t size)
 {
@@ -101,8 +103,8 @@
 	return crc;
 }
 
-#define BCD_H(v) (((v) >> 4) & 0xf)
-#define BCD_L(v) ((v)&0xf)
+#define BCD_H(v)       (((v) >> 4) & 0xf)
+#define BCD_L(v)       ((v)&0xf)
 #define AS_CHAR(digit) ((digit) + '0')
 #define INSERT_CHAR(c, b, n)                                                   \
 	{                                                                      \
@@ -193,8 +195,8 @@
 	if (month < 1 || month > 12) {
 		return false;
 	}
-	static const int days[13] = {0,	 31, 28, 31, 30, 31, 30,
-				     31, 31, 30, 31, 30, 31};
+	static const int days[13] = { 0,  31, 28, 31, 30, 31, 30,
+				      31, 31, 30, 31, 30, 31 };
 	int rday = days[month];
 	if (month == 2 &&
 	    ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
diff --git a/tests/libpldm_platform_test.cpp b/tests/libpldm_platform_test.cpp
index 99b6729..0b3370d 100644
--- a/tests/libpldm_platform_test.cpp
+++ b/tests/libpldm_platform_test.cpp
@@ -3106,21 +3106,21 @@
         0x1,
         0x0,
         0x0,
-        0x0,                     // record handle
-        0x1,                     // PDRHeaderVersion
-        PLDM_NUMERIC_SENSOR_PDR, // PDRType
+        0x0,                         // record handle
+        0x1,                         // PDRHeaderVersion
+        PLDM_NUMERIC_SENSOR_PDR,     // PDRType
         0x0,
-        0x0, // recordChangeNumber
+        0x0,                         // recordChangeNumber
         PLDM_PDR_NUMERIC_SENSOR_PDR_MIN_LENGTH,
-        0, // dataLength
+        0,                           // dataLength
         0,
-        0, // PLDMTerminusHandle
+        0,                           // PLDMTerminusHandle
         0x1,
-        0x0, // sensorID=1
+        0x0,                         // sensorID=1
         PLDM_ENTITY_POWER_SUPPLY,
-        0, // entityType=Power Supply(120)
+        0,                           // entityType=Power Supply(120)
         1,
-        0, // entityInstanceNumber
+        0,                           // entityInstanceNumber
         1,
         0,                           // containerID=1
         PLDM_NO_INIT,                // sensorInit
@@ -3145,12 +3145,12 @@
         0x80,
         0x3f, // offset=1.0
         0,
-        0, // accuracy
-        0, // plusTolerance
-        0, // minusTolerance
-        3, // hysteresis = 3
-        0, // supportedThresholds
-        0, // thresholdAndHysteresisVolatility
+        0,    // accuracy
+        0,    // plusTolerance
+        0,    // minusTolerance
+        3,    // hysteresis = 3
+        0,    // supportedThresholds
+        0,    // thresholdAndHysteresisVolatility
         0,
         0,
         0x80,
@@ -3235,19 +3235,19 @@
         0x1,                     // PDRHeaderVersion
         PLDM_NUMERIC_SENSOR_PDR, // PDRType
         0x0,
-        0x0, // recordChangeNumber
+        0x0,                     // recordChangeNumber
         PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH,
-        0, // dataLength
+        0,                             // dataLength
         0,
-        0, // PLDMTerminusHandle
+        0,                             // PLDMTerminusHandle
         0x1,
-        0x0, // sensorID=1
+        0x0,                           // sensorID=1
         PLDM_ENTITY_POWER_SUPPLY,
-        0, // entityType=Power Supply(120)
+        0,                             // entityType=Power Supply(120)
         1,
-        0, // entityInstanceNumber
+        0,                             // entityInstanceNumber
         0x1,
         0x0,                           // containerID=1
         PLDM_NO_INIT,                  // sensorInit
@@ -3331,19 +3331,19 @@
         0x1,                     // PDRHeaderVersion
         PLDM_NUMERIC_SENSOR_PDR, // PDRType
         0x0,
-        0x0, // recordChangeNumber
+        0x0,                     // recordChangeNumber
         PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH * 2 +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH * 2,
-        0, // dataLength
+        0,                            // dataLength
         0,
-        0, // PLDMTerminusHandle
+        0,                            // PLDMTerminusHandle
         0x1,
-        0x0, // sensorID=1
+        0x0,                          // sensorID=1
         PLDM_ENTITY_POWER_SUPPLY,
-        0, // entityType=Power Supply(120)
+        0,                            // entityType=Power Supply(120)
         1,
-        0, // entityInstanceNumber
+        0,                            // entityInstanceNumber
         0x1,
         0x0,                          // containerID=1
         PLDM_NO_INIT,                 // sensorInit
@@ -3382,31 +3382,31 @@
         0,
         0,
         0x80,
-        0x3f, // updateInverval=1.0
+        0x3f,                           // updateInverval=1.0
         0,
-        0x10, // maxReadable = 4096
+        0x10,                           // maxReadable = 4096
         0,
         0,                              // minReadable = 0
         PLDM_RANGE_FIELD_FORMAT_UINT16, // rangeFieldFormat
         0,                              // rangeFieldsupport
         0x88,
-        0x13, // nominalValue = 5,000
+        0x13,                           // nominalValue = 5,000
         0x70,
-        0x17, // normalMax = 6,000
+        0x17,                           // normalMax = 6,000
         0xa0,
-        0x0f, // normalMin = 4,000
+        0x0f,                           // normalMin = 4,000
         0x58,
-        0x1b, // warningHigh = 7,000
+        0x1b,                           // warningHigh = 7,000
         0xb8,
-        0x0b, // warningLow = 3,000
+        0x0b,                           // warningLow = 3,000
         0x40,
-        0x1f, // criticalHigh = 8,000
+        0x1f,                           // criticalHigh = 8,000
         0xd0,
-        0x07, // criticalLow = 2,000
+        0x07,                           // criticalLow = 2,000
         0x28,
-        0x23, // fatalHigh = 9,000
+        0x23,                           // fatalHigh = 9,000
         0xe8,
-        0x03 // fatalLow = 1,000
+        0x03                            // fatalLow = 1,000
     };
 
     struct pldm_numeric_sensor_value_pdr decodedPdr;
@@ -3439,19 +3439,19 @@
         0x1,                     // PDRHeaderVersion
         PLDM_NUMERIC_SENSOR_PDR, // PDRType
         0x0,
-        0x0, // recordChangeNumber
+        0x0,                     // recordChangeNumber
         PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH * 2 +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH * 2,
-        0, // dataLength
+        0,                            // dataLength
         0,
-        0, // PLDMTerminusHandle
+        0,                            // PLDMTerminusHandle
         0x1,
-        0x0, // sensorID=1
+        0x0,                          // sensorID=1
         PLDM_ENTITY_POWER_SUPPLY,
-        0, // entityType=Power Supply(120)
+        0,                            // entityType=Power Supply(120)
         1,
-        0, // entityInstanceNumber
+        0,                            // entityInstanceNumber
         0x1,
         0x0,                          // containerID=1
         PLDM_NO_INIT,                 // sensorInit
@@ -3490,31 +3490,31 @@
         0,
         0,
         0x80,
-        0x3f, // updateInverval=1.0
+        0x3f,                           // updateInverval=1.0
         0xe8,
-        0x03, // maxReadable = 1000
+        0x03,                           // maxReadable = 1000
         0x18,
         0xfc,                           // minReadable = -1000
         PLDM_RANGE_FIELD_FORMAT_SINT16, // rangeFieldFormat
         0,                              // rangeFieldsupport
         0,
-        0, // nominalValue = 0
+        0,                              // nominalValue = 0
         0xf4,
-        0x01, // normalMax = 500
+        0x01,                           // normalMax = 500
         0x0c,
-        0xfe, // normalMin = -500
+        0xfe,                           // normalMin = -500
         0xe8,
-        0x03, // warningHigh = 1,000
+        0x03,                           // warningHigh = 1,000
         0x18,
-        0xfc, // warningLow = -1,000
+        0xfc,                           // warningLow = -1,000
         0xd0,
-        0x07, // criticalHigh = 2,000
+        0x07,                           // criticalHigh = 2,000
         0x30,
-        0xf8, // criticalLow = -2,000
+        0xf8,                           // criticalLow = -2,000
         0xb8,
-        0x0b, // fatalHigh = 3,000
+        0x0b,                           // fatalHigh = 3,000
         0x48,
-        0xf4 // fatalLow = -3,000
+        0xf4                            // fatalLow = -3,000
     };
 
     struct pldm_numeric_sensor_value_pdr decodedPdr;
@@ -3547,19 +3547,19 @@
         0x1,                     // PDRHeaderVersion
         PLDM_NUMERIC_SENSOR_PDR, // PDRType
         0x0,
-        0x0, // recordChangeNumber
+        0x0,                     // recordChangeNumber
         PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH * 4 +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH * 4,
-        0, // dataLength
+        0,                            // dataLength
         0,
-        0, // PLDMTerminusHandle
+        0,                            // PLDMTerminusHandle
         0x1,
-        0x0, // sensorID=1
+        0x0,                          // sensorID=1
         PLDM_ENTITY_POWER_SUPPLY,
-        0, // entityType=Power Supply(120)
+        0,                            // entityType=Power Supply(120)
         1,
-        0, // entityInstanceNumber
+        0,                            // entityInstanceNumber
         0x1,
         0x0,                          // containerID=1
         PLDM_NO_INIT,                 // sensorInit
@@ -3679,19 +3679,19 @@
         0x1,                     // PDRHeaderVersion
         PLDM_NUMERIC_SENSOR_PDR, // PDRType
         0x0,
-        0x0, // recordChangeNumber
+        0x0,                     // recordChangeNumber
         PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH * 4 +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH * 4,
-        0, // dataLength
+        0,                            // dataLength
         0,
-        0, // PLDMTerminusHandle
+        0,                            // PLDMTerminusHandle
         0x1,
-        0x0, // sensorID=1
+        0x0,                          // sensorID=1
         PLDM_ENTITY_POWER_SUPPLY,
-        0, // entityType=Power Supply(120)
+        0,                            // entityType=Power Supply(120)
         1,
-        0, // entityInstanceNumber
+        0,                            // entityInstanceNumber
         0x1,
         0x0,                          // containerID=1
         PLDM_NO_INIT,                 // sensorInit
@@ -3811,19 +3811,19 @@
         0x1,                     // PDRHeaderVersion
         PLDM_NUMERIC_SENSOR_PDR, // PDRType
         0x0,
-        0x0, // recordChangeNumber
+        0x0,                     // recordChangeNumber
         PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_SENSOR_DATA_SIZE_MIN_LENGTH * 4 +
             PLDM_PDR_NUMERIC_SENSOR_PDR_VARIED_RANGE_FIELD_MIN_LENGTH * 4,
-        0, // dataLength
+        0,                            // dataLength
         0,
-        0, // PLDMTerminusHandle
+        0,                            // PLDMTerminusHandle
         0x1,
-        0x0, // sensorID=1
+        0x0,                          // sensorID=1
         PLDM_ENTITY_POWER_SUPPLY,
-        0, // entityType=Power Supply(120)
+        0,                            // entityType=Power Supply(120)
         1,
-        0, // entityInstanceNumber
+        0,                            // entityInstanceNumber
         0x1,
         0x0,                          // containerID=1
         PLDM_NO_INIT,                 // sensorInit
@@ -3940,21 +3940,21 @@
         0x1,
         0x0,
         0x0,
-        0x0,                     // record handle
-        0x1,                     // PDRHeaderVersion
-        PLDM_NUMERIC_SENSOR_PDR, // PDRType
+        0x0,                         // record handle
+        0x1,                         // PDRHeaderVersion
+        PLDM_NUMERIC_SENSOR_PDR,     // PDRType
         0x0,
-        0x0, // recordChangeNumber
+        0x0,                         // recordChangeNumber
         PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH,
-        0, // dataLength
+        0,                           // dataLength
         0,
-        0, // PLDMTerminusHandle
+        0,                           // PLDMTerminusHandle
         0x1,
-        0x0, // sensorID=1
+        0x0,                         // sensorID=1
         PLDM_ENTITY_POWER_SUPPLY,
-        0, // entityType=Power Supply(120)
+        0,                           // entityType=Power Supply(120)
         1,
-        0, // entityInstanceNumber
+        0,                           // entityInstanceNumber
         0x1,
         0x0,                         // containerID=1
         PLDM_NO_INIT,                // sensorInit
diff --git a/tests/libpldm_utils_test.cpp b/tests/libpldm_utils_test.cpp
index 663a531..0b787e5 100644
--- a/tests/libpldm_utils_test.cpp
+++ b/tests/libpldm_utils_test.cpp
@@ -84,7 +84,7 @@
 TEST(TimeLegal, TimeLegal)
 {
     EXPECT_EQ(true, is_time_legal(30, 25, 16, 18, 8, 2019));
-    EXPECT_EQ(true, is_time_legal(30, 25, 16, 29, 2, 2020)); // leap year
+    EXPECT_EQ(true, is_time_legal(30, 25, 16, 29, 2, 2020));   // leap year
 
     EXPECT_EQ(false, is_time_legal(30, 25, 16, 18, 8, 1960));  // year illegal
     EXPECT_EQ(false, is_time_legal(30, 25, 16, 18, 15, 2019)); // month illegal
