From b1b4cb0e09d6154d4c742874548eea96f1c0676c Mon Sep 17 00:00:00 2001 From: Jonathan Date: Fri, 29 Jul 2022 04:49:54 -0400 Subject: [PATCH] try relative to current working dir if can't find archive (need to search relative to .map too) --- common/fs.cc | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/common/fs.cc b/common/fs.cc index 1769f2e7..feb7a8b1 100644 --- a/common/fs.cc +++ b/common/fs.cc @@ -214,18 +214,8 @@ void clear() directories.clear(); } -std::shared_ptr addArchive(const path &p, bool external) +inline std::shared_ptr addArchiveInternal(const path &p, bool external) { - if (p.empty()) { - logging::funcprint("WARNING: can't add empty archive path\n"); - return nullptr; - } - - if (!exists(p)) { - logging::funcprint("WARNING: archive '{}' not found\n", p); - return nullptr; - } - if (is_directory(p)) { for (auto &dir : directories) { if (equivalent(dir->pathname, p)) { @@ -267,6 +257,28 @@ std::shared_ptr addArchive(const path &p, bool external) return nullptr; } +std::shared_ptr addArchive(const path &p, bool external) +{ + if (p.empty()) { + logging::funcprint("WARNING: can't add empty archive path\n"); + return nullptr; + } + + if (!exists(p)) { + // check relative + path filename = p.filename(); + + if (!exists(filename)) { + logging::funcprint("WARNING: archive '{}' not found\n", p); + return nullptr; + } + + return addArchiveInternal(filename, external); + } + + return addArchiveInternal(p, external); +} + resolve_result where(const path &p, bool prefer_loose) { // check direct archive loading first; it can't ever