diff --git a/modcc/module.cpp b/modcc/module.cpp
index 509d775515ba8ebeb7f1e8dc9918ca772d102d14..3e8fe3d77da7c2e2be24493cc04c00393f111f03 100644
--- a/modcc/module.cpp
+++ b/modcc/module.cpp
@@ -31,21 +31,18 @@ Module::Module(std::string const& fname)
     buffer_[size] = 0; // append \0 to terminate string
 }
 
-Module::Module(std::vector<char> const& buffer)
-{
+Module::Module(std::vector<char> const& buffer) {
     buffer_ = buffer;
 
     // add \0 to end of buffer if not already present
-    if(buffer_[buffer_.size()-1] != 0)
+    if (buffer_[buffer_.size()-1] != 0)
         buffer_.push_back(0);
 }
 
-Module::Module(const char* buffer, size_t count)
-{
-    for (auto i = 0; i < count-1 && *buffer != '\0'; ++buffer) {
-        buffer_.push_back(*buffer);
-    }
-
+Module::Module(const char* buffer, size_t count) {
+    auto size = std::distance(buffer, std::find(buffer, buffer+count, '\0'));
+    buffer_.reserve(size+1);
+    buffer_.insert(buffer_.end(), buffer, buffer+size);
     buffer_.push_back(0);
 }