From 4bfab60ac641860a86836e110e2807b3b0717101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ibrahim=20Numanagic=CC=81?= Date: Fri, 25 Feb 2022 09:19:35 -0800 Subject: [PATCH] Fix getAbsolutePath (use POSIX realpath) --- codon/parser/common.cpp | 9 ++++++--- codon/parser/common.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/codon/parser/common.cpp b/codon/parser/common.cpp index e0e574a8..34e9a519 100644 --- a/codon/parser/common.cpp +++ b/codon/parser/common.cpp @@ -247,9 +247,12 @@ ImportFile getRoot(const std::string argv0, const std::vector &plug } // namespace std::string getAbsolutePath(const std::string &path) { - llvm::SmallString<128> p(path); - llvm::sys::fs::make_absolute(p); - return std::string(p); + char *c = realpath(path.c_str(), nullptr); + if (!c) + return path; + std::string result(c); + free(c); + return result; } std::shared_ptr getImportFile(const std::string &argv0, diff --git a/codon/parser/common.h b/codon/parser/common.h index 568ab875..4978e64b 100644 --- a/codon/parser/common.h +++ b/codon/parser/common.h @@ -167,7 +167,7 @@ template std::vector clone_nop(const std::vector &t) { /// Path utilities -/// @return The absolute path of a given path. +/// @return The absolute canonical path of a given path. std::string getAbsolutePath(const std::string &path); /// Detect a absolute path of the current executable (whose argv0 is known).