aboutsummaryrefslogtreecommitdiffstats
path: root/src/input/LocalOpen.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/LocalOpen.cxx')
-rw-r--r--src/input/LocalOpen.cxx15
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());