diff --git a/common/libs/utils/files.cpp b/common/libs/utils/files.cpp
index f1bcea7..85c7ef7 100644
--- a/common/libs/utils/files.cpp
+++ b/common/libs/utils/files.cpp
@@ -16,6 +16,11 @@
 
 #include "common/libs/utils/files.h"
 
+#include <glog/logging.h>
+
+#include <array>
+#include <climits>
+#include <cstdlib>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
@@ -24,17 +29,34 @@
 
 bool FileHasContent(const std::string& path) {
   struct stat st;
-  if (stat(path.c_str(), &st) == -1)
+  if (stat(path.c_str(), &st) == -1) {
     return false;
-  if (st.st_size == 0)
+  }
+  if (st.st_size == 0) {
     return false;
+  }
   return true;
 }
 
 bool DirectoryExists(const std::string& path) {
   struct stat st;
-  if (stat(path.c_str(), &st) == -1) return false;
-  if ((st.st_mode & S_IFMT) != S_IFDIR) return false;
+  if (stat(path.c_str(), &st) == -1) {
+    return false;
+  }
+  if ((st.st_mode & S_IFMT) != S_IFDIR) {
+    return false;
+  }
   return true;
 }
+
+std::string RealPath(const std::string& path) {
+  std::array<char, PATH_MAX> buffer{};
+  if (!realpath(path.c_str(), buffer.data())) {
+    LOG(WARNING) << "Could not get real path for file " << path << ": "
+                 << strerror(errno);
+    return {};
+  }
+  return {buffer.data()};
+}
+
 }  // namespace cvd
diff --git a/common/libs/utils/files.h b/common/libs/utils/files.h
index 5229b3a..51ba25e 100644
--- a/common/libs/utils/files.h
+++ b/common/libs/utils/files.h
@@ -20,4 +20,7 @@
 namespace cvd {
 bool FileHasContent(const std::string& path);
 bool DirectoryExists(const std::string& path);
+
+// returns empty string if realpath() fails
+std::string RealPath(const std::string& path);
 }  // namespace cvd
diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp
index 260f050..9104b54 100644
--- a/host/libs/config/cuttlefish_config.cpp
+++ b/host/libs/config/cuttlefish_config.cpp
@@ -29,6 +29,7 @@
 #include <json/json.h>
 
 #include "common/libs/utils/environment.h"
+#include "common/libs/utils/files.h"
 
 DEFINE_string(config_file,
               vsoc::GetDefaultPerInstanceDir() + "/cuttlefish_config.json",
@@ -66,6 +67,7 @@
 
   return instance;
 }
+
 const char* kSerialNumber = "serial_number";
 const char* kInstanceDir = "instance_dir";
 
@@ -404,12 +406,10 @@
 }
 
 void CuttlefishConfig::LoadFromFile(const char* file) {
-  char real_file_path[PATH_MAX];
-  if (realpath(file, real_file_path) == nullptr) {
-    LOG(FATAL) << "Could not get real path for file " << file << ": "
-               << strerror(errno);
+  auto real_file_path = cvd::RealPath(file);
+  if (real_file_path.empty()) {
+    LOG(FATAL) << "Could not get real path for file " << file;
   }
-
   Json::Reader reader;
   std::ifstream ifs(real_file_path);
   if (!reader.parse(ifs, *dictionary_)) {
