diff options
Diffstat (limited to 'src/input/LocalOpen.cxx')
-rw-r--r-- | src/input/LocalOpen.cxx | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/input/LocalOpen.cxx b/src/input/LocalOpen.cxx index a1ac2b856..ad8eba8ce 100644 --- a/src/input/LocalOpen.cxx +++ b/src/input/LocalOpen.cxx @@ -31,6 +31,10 @@ #include <assert.h> +#ifdef ENABLE_ARCHIVE +#include <errno.h> +#endif + InputStream * OpenLocalInputStream(Path path, Mutex &mutex, Cond &cond, Error &error) { @@ -38,8 +42,15 @@ OpenLocalInputStream(Path path, Mutex &mutex, Cond &cond, Error &error) InputStream *is = OpenFileInputStream(path, mutex, cond, error); #ifdef ENABLE_ARCHIVE - if (is == nullptr && !error.IsDefined()) - is = OpenArchiveInputStream(path, mutex, cond, error); + if (is == nullptr && error.IsDomain(errno_domain) && + error.GetCode() == ENOTDIR) { + /* ENOTDIR means this may be a path inside an archive + file */ + Error error2; + is = OpenArchiveInputStream(path, mutex, cond, error2); + if (is == nullptr && error2.IsDefined()) + error = std::move(error2); + } #endif assert(is == nullptr || is->IsReady()); |