Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelfmz <fenix1905@tut.by>2021-10-08 01:41:32 +0300
committerelfmz <fenix1905@tut.by>2021-10-08 01:41:32 +0300
commitbba45a73c7ca1a2948df445abd8b4bb167a579c8 (patch)
treea4326ef72ec0edbfb246a0be27b5d4f7b9ef750e /multiarc
parent71cbf724c94ce7c4fa3510c38c14165f95afa6e6 (diff)
ma/libarch: optimize single file extraction by skipping everything else after it
Diffstat (limited to 'multiarc')
-rw-r--r--multiarc/src/formats/libarch/libarch_cmd_read.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/multiarc/src/formats/libarch/libarch_cmd_read.cpp b/multiarc/src/formats/libarch/libarch_cmd_read.cpp
index 0bf5e088..596d68e5 100644
--- a/multiarc/src/formats/libarch/libarch_cmd_read.cpp
+++ b/multiarc/src/formats/libarch/libarch_cmd_read.cpp
@@ -102,6 +102,12 @@ static bool LIBARCH_CommandReadWanteds(const char *cmd, LibArchOpenRead &arc,
} else {
fprintf(stderr, "Extracted: '%s' -> '%s'\n",
src_path.c_str(), extract_path.c_str());
+
+ struct stat s;
+ if (wanteds.size() == 1 && wanteds[0] == parts
+ && stat(extract_path.c_str(), &s) == 0 && !S_ISDIR(s.st_mode)) {
+ break; // nothing to search more here
+ }
}
}