diff --git a/include/FruUtils.hpp b/include/FruUtils.hpp
index ea1233b..beab032 100644
--- a/include/FruUtils.hpp
+++ b/include/FruUtils.hpp
@@ -115,7 +115,7 @@
 
 resCodes
     formatIPMIFRU(const std::vector<uint8_t>& fruBytes,
-              boost::container::flat_map<std::string, std::string>& result);
+                  boost::container::flat_map<std::string, std::string>& result);
 
 std::vector<uint8_t>& getFRUInfo(const uint8_t& bus, const uint8_t& address);
 
diff --git a/src/FruUtils.cpp b/src/FruUtils.cpp
index 7296aa8..9a7c519 100644
--- a/src/FruUtils.cpp
+++ b/src/FruUtils.cpp
@@ -588,15 +588,14 @@
 }
 
 bool findFRUHeader(int flag, int file, uint16_t address,
-                   const ReadBlockFunc& readBlock,
-                   const std::string& errorHelp,
+                   const ReadBlockFunc& readBlock, const std::string& errorHelp,
                    std::array<uint8_t, I2C_SMBUS_BLOCK_MAX>& blockData,
                    uint16_t& baseOffset)
 {
     if (readBlock(flag, file, address, baseOffset, 0x8, blockData.data()) < 0)
     {
         std::cerr << "failed to read " << errorHelp << " base offset "
-            << baseOffset << "\n";
+                  << baseOffset << "\n";
         return false;
     }
 
@@ -607,7 +606,8 @@
     }
 
     // only continue the search if we just looked at 0x0.
-    if (baseOffset != 0) {
+    if (baseOffset != 0)
+    {
         return false;
     }
 
@@ -621,13 +621,13 @@
         // look for the FRU header at offset 0x6000
         baseOffset = 0x6000;
         return findFRUHeader(flag, file, address, readBlock, errorHelp,
-            blockData, baseOffset);
+                             blockData, baseOffset);
     }
 
     if (debug)
     {
         std::cerr << "Illegal header " << errorHelp << " base offset "
-            << baseOffset << "\n";
+                  << baseOffset << "\n";
     }
 
     return false;
@@ -640,8 +640,9 @@
     std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> blockData;
     uint16_t baseOffset = 0x0;
 
-    if (!findFRUHeader(flag, file, address, readBlock, errorHelp,
-            blockData, baseOffset)) {
+    if (!findFRUHeader(flag, file, address, readBlock, errorHelp, blockData,
+                       baseOffset))
+    {
         return {};
     }
 
@@ -685,11 +686,11 @@
         areaOffset *= fruBlockSize;
 
         if (readBlock(flag, file, address,
-                      baseOffset + static_cast<uint16_t>(areaOffset),
-                      0x2, blockData.data()) < 0)
+                      baseOffset + static_cast<uint16_t>(areaOffset), 0x2,
+                      blockData.data()) < 0)
         {
             std::cerr << "failed to read " << errorHelp << " base offset "
-                << baseOffset << "\n";
+                      << baseOffset << "\n";
             return {};
         }
 
@@ -721,7 +722,7 @@
                           blockData.data()) < 0)
             {
                 std::cerr << "failed to read " << errorHelp << " base offset "
-                    << baseOffset << "\n";
+                          << baseOffset << "\n";
                 return {};
             }
 
@@ -755,7 +756,7 @@
                       blockData.data()) < 0)
         {
             std::cerr << "failed to read " << errorHelp << " base offset "
-                << baseOffset << "\n";
+                      << baseOffset << "\n";
             return {};
         }
 
diff --git a/test/test_fru-utils.cpp b/test/test_fru-utils.cpp
index 2984094..f37da0e 100644
--- a/test/test_fru-utils.cpp
+++ b/test/test_fru-utils.cpp
@@ -1,8 +1,8 @@
 #include "FruUtils.hpp"
 
+#include <algorithm>
 #include <array>
-#include<algorithm>
-#include<iterator>
+#include <iterator>
 
 #include "gtest/gtest.h"
 
@@ -145,12 +145,10 @@
     EXPECT_EQ(calculateChecksum(data), 255);
 }
 
-int64_t getDataTempl(
-    const std::vector<uint8_t>& data,
-    [[maybe_unused]] int flag,
-    [[maybe_unused]] int file,
-    [[maybe_unused]] uint16_t address,
-    uint16_t offset, uint8_t length, uint8_t* outBuf)
+int64_t getDataTempl(const std::vector<uint8_t>& data,
+                     [[maybe_unused]] int flag, [[maybe_unused]] int file,
+                     [[maybe_unused]] uint16_t address, uint16_t offset,
+                     uint8_t length, uint8_t* outBuf)
 {
     if (offset >= data.size())
     {
@@ -158,8 +156,7 @@
     }
 
     uint16_t idx;
-    for (idx = offset;
-         idx < data.size() && idx < offset + length;
+    for (idx = offset; idx < data.size() && idx < offset + length;
          ++idx, ++outBuf)
     {
         *outBuf = data[idx];
@@ -173,8 +170,9 @@
     const std::vector<uint8_t> data = {255, 16};
     uint16_t offset = 0;
     std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> blockData;
-    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l,
-        auto* b) { return getDataTempl(data, fl, fi, a, o, l, b); };
+    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l, auto* b) {
+        return getDataTempl(data, fl, fi, a, o, l, b);
+    };
 
     EXPECT_FALSE(findFRUHeader(0, 0, 0, getData, "error", blockData, offset));
 }
@@ -184,20 +182,22 @@
     const std::vector<uint8_t> data = {};
     uint16_t offset = 0;
     std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> blockData;
-    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l,
-        auto* b) { return getDataTempl(data, fl, fi, a, o, l, b); };
+    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l, auto* b) {
+        return getDataTempl(data, fl, fi, a, o, l, b);
+    };
 
     EXPECT_FALSE(findFRUHeader(0, 0, 0, getData, "error", blockData, offset));
 }
 
 TEST(FindFRUHeaderTest, ValidHeader)
 {
-    const std::vector<uint8_t> data = {
-        0x01, 0x00, 0x01, 0x02, 0x03, 0x04, 0x00, 0xf5};
+    const std::vector<uint8_t> data = {0x01, 0x00, 0x01, 0x02,
+                                       0x03, 0x04, 0x00, 0xf5};
     uint16_t offset = 0;
     std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> blockData;
-    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l,
-        auto* b) { return getDataTempl(data, fl, fi, a, o, l, b); };
+    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l, auto* b) {
+        return getDataTempl(data, fl, fi, a, o, l, b);
+    };
 
     EXPECT_TRUE(findFRUHeader(0, 0, 0, getData, "error", blockData, offset));
     EXPECT_EQ(0, offset);
@@ -209,8 +209,9 @@
     data.resize(0x6000 + I2C_SMBUS_BLOCK_MAX);
     uint16_t offset = 0;
     std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> blockData;
-    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l,
-        auto* b) { return getDataTempl(data, fl, fi, a, o, l, b); };
+    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l, auto* b) {
+        return getDataTempl(data, fl, fi, a, o, l, b);
+    };
 
     EXPECT_FALSE(findFRUHeader(0, 0, 0, getData, "error", blockData, offset));
 }
@@ -220,8 +221,9 @@
     const std::vector<uint8_t> data = {'$', 'T', 'Y', 'A', 'N', '$', 0, 0};
     uint16_t offset = 0;
     std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> blockData;
-    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l,
-        auto* b) { return getDataTempl(data, fl, fi, a, o, l, b); };
+    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l, auto* b) {
+        return getDataTempl(data, fl, fi, a, o, l, b);
+    };
 
     EXPECT_FALSE(findFRUHeader(0, 0, 0, getData, "error", blockData, offset));
 }
@@ -236,8 +238,9 @@
 
     uint16_t offset = 0;
     std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> blockData;
-    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l,
-        auto* b) { return getDataTempl(data, fl, fi, a, o, l, b); };
+    auto getData = [&data](auto fl, auto fi, auto a, auto o, auto l, auto* b) {
+        return getDataTempl(data, fl, fi, a, o, l, b);
+    };
 
     EXPECT_TRUE(findFRUHeader(0, 0, 0, getData, "error", blockData, offset));
     EXPECT_EQ(0x6000, offset);
