diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2020-05-12 11:08:59 +0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2020-05-12 11:09:09 +0200 |
commit | 437614b479dd30200dcdc1950f8d4fdddfef7a61 (patch) | |
tree | bf91936e3fa62d858c0f7407c402a57fa679dcbe /src | |
parent | 649c2db308f16ce4b2cbefe4a8760577541cfb47 (diff) |
Fix macOS build
macOS doesn't have GLOB_ONLYDIR.
Diffstat (limited to 'src')
-rw-r--r-- | src/libutil/args.cc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/libutil/args.cc b/src/libutil/args.cc index f6740e076..8667bd450 100644 --- a/src/libutil/args.cc +++ b/src/libutil/args.cc @@ -220,25 +220,35 @@ Args::Flag Args::Flag::mkHashTypeFlag(std::string && longName, HashType * ht) }; } -static void completePath(std::string_view prefix, int flags) +static void completePath(std::string_view prefix, bool onlyDirs) { pathCompletions = true; glob_t globbuf; - if (glob((std::string(prefix) + "*").c_str(), GLOB_NOESCAPE | GLOB_TILDE | flags, nullptr, &globbuf) == 0) { - for (size_t i = 0; i < globbuf.gl_pathc; ++i) + int flags = GLOB_NOESCAPE | GLOB_TILDE; + #ifdef GLOB_ONLYDIR + if (onlyDirs) + flags |= GLOB_ONLYDIR; + #endif + if (glob((std::string(prefix) + "*").c_str(), flags, nullptr, &globbuf) == 0) { + for (size_t i = 0; i < globbuf.gl_pathc; ++i) { + if (onlyDirs) { + auto st = lstat(globbuf.gl_pathv[i]); + if (!S_ISDIR(st.st_mode)) continue; + } completions->insert(globbuf.gl_pathv[i]); + } globfree(&globbuf); } } void completePath(size_t, std::string_view prefix) { - completePath(prefix, 0); + completePath(prefix, false); } void completeDir(size_t, std::string_view prefix) { - completePath(prefix, GLOB_ONLYDIR); + completePath(prefix, true); } Strings argvToStrings(int argc, char * * argv) |