diff --git a/src/buffer.cpp b/src/buffer.cpp
index 4f1812d..b38862e 100644
--- a/src/buffer.cpp
+++ b/src/buffer.cpp
@@ -75,8 +75,8 @@
 void BufferImpl::readBufferHeader()
 {
     size_t headerSize = sizeof(struct CircularBufferHeader);
-    std::vector<uint8_t> bytesRead =
-        dataInterface->read(/*offset=*/0, headerSize);
+    std::vector<uint8_t> bytesRead = dataInterface->read(/*offset=*/0,
+                                                         headerSize);
 
     if (bytesRead.size() != headerSize)
     {
@@ -96,8 +96,8 @@
 
 void BufferImpl::updateReadPtr(const uint32_t newReadPtr)
 {
-    constexpr uint8_t bmcReadPtrOffset =
-        offsetof(struct CircularBufferHeader, bmcReadPtr);
+    constexpr uint8_t bmcReadPtrOffset = offsetof(struct CircularBufferHeader,
+                                                  bmcReadPtr);
 
     little_uint24_t truncatedReadPtr =
         boost::endian::native_to_little(newReadPtr & 0xffffff);
@@ -119,8 +119,8 @@
 
 void BufferImpl::updateBmcFlags(const uint32_t newBmcFlag)
 {
-    constexpr uint8_t bmcFlagsPtrOffset =
-        offsetof(struct CircularBufferHeader, bmcFlags);
+    constexpr uint8_t bmcFlagsPtrOffset = offsetof(struct CircularBufferHeader,
+                                                   bmcFlags);
 
     little_uint32_t littleNewBmcFlag =
         boost::endian::native_to_little(newBmcFlag);
diff --git a/src/pci_handler.cpp b/src/pci_handler.cpp
index 9ccb550..201be8f 100644
--- a/src/pci_handler.cpp
+++ b/src/pci_handler.cpp
@@ -37,8 +37,8 @@
     }
 
     // Read up to regionSize in case the offset + length overflowed
-    uint32_t finalLength =
-        (offset + length < regionSize) ? length : regionSize - offset;
+    uint32_t finalLength = (offset + length < regionSize) ? length
+                                                          : regionSize - offset;
     std::vector<uint8_t> results(finalLength);
 
     std::memcpy(results.data(), mmap.get().data() + offset, finalLength);
@@ -59,8 +59,8 @@
     }
 
     // Write up to regionSize in case the offset + length overflowed
-    uint16_t finalLength =
-        (offset + length < regionSize) ? length : regionSize - offset;
+    uint16_t finalLength = (offset + length < regionSize) ? length
+                                                          : regionSize - offset;
     std::memcpy(mmap.get().data() + offset, bytes.data(), finalLength);
     return finalLength;
 }
diff --git a/src/rde/rde_dictionary_manager.cpp b/src/rde/rde_dictionary_manager.cpp
index a71114c..c3567fb 100644
--- a/src/rde/rde_dictionary_manager.cpp
+++ b/src/rde/rde_dictionary_manager.cpp
@@ -7,8 +7,7 @@
 namespace rde
 {
 
-DictionaryManager::DictionaryManager() : validDictionaryCount(0)
-{}
+DictionaryManager::DictionaryManager() : validDictionaryCount(0) {}
 
 void DictionaryManager::startDictionaryEntry(
     uint32_t resourceId, const std::span<const uint8_t> data)
@@ -17,8 +16,8 @@
     auto itemIt = dictionaries.find(resourceId);
     if (itemIt == dictionaries.end())
     {
-        dictionaries[resourceId] =
-            std::make_unique<DictionaryEntry>(false, data);
+        dictionaries[resourceId] = std::make_unique<DictionaryEntry>(false,
+                                                                     data);
         return;
     }
 
