| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/lib/files/glob.h" |
| |
| namespace files { |
| |
| Glob::Glob(const std::string& path, const Options& options) { |
| memset(&glob_buf_, 0, sizeof(glob_t)); |
| int flags = options_to_flags(options); |
| GlobInternal(path, &flags); |
| } |
| |
| Glob::Glob(std::initializer_list<std::string> paths, const Options& options) { |
| memset(&glob_buf_, 0, sizeof(glob_t)); |
| int flags = options_to_flags(options); |
| for (const auto& path : paths) { |
| GlobInternal(path, &flags); |
| } |
| } |
| |
| Glob::~Glob() { globfree(&glob_buf_); } |
| |
| int Glob::options_to_flags(const Options& options) { |
| int ret = 0; |
| if (options.no_sort) { |
| ret |= GLOB_NOSORT; |
| } |
| if (options.mark) { |
| ret |= GLOB_MARK; |
| } |
| return ret; |
| } |
| |
| void Glob::GlobInternal(const std::string& path, int* flags) { |
| if (glob(path.c_str(), *flags, nullptr, &glob_buf_) == 0) { |
| *flags |= GLOB_APPEND; |
| } |
| } |
| |
| } // namespace files |