diff options
author | elfmz <fenix1905@tut.by> | 2021-10-08 01:41:32 +0300 |
---|---|---|
committer | elfmz <fenix1905@tut.by> | 2021-10-08 01:41:32 +0300 |
commit | bba45a73c7ca1a2948df445abd8b4bb167a579c8 (patch) | |
tree | a4326ef72ec0edbfb246a0be27b5d4f7b9ef750e /multiarc | |
parent | 71cbf724c94ce7c4fa3510c38c14165f95afa6e6 (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.cpp | 6 |
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 + } } } |