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