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;
 	}
