| // Copyright 2019 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/developer/debug/shared/regex.h" | |
| #include <lib/syslog/cpp/macros.h> | |
| namespace debug_ipc { | |
| Regex::Regex() = default; | |
| Regex::~Regex() { | |
| if (handle_.has_value()) | |
| regfree(&handle_.value()); | |
| } | |
| Regex::Regex(Regex&& other) : handle_(std::move(other.handle_)) { other.handle_.reset(); } | |
| Regex& Regex::operator=(Regex&& other) { | |
| if (this == &other) | |
| return *this; | |
| handle_ = std::move(other.handle_); | |
| other.handle_.reset(); | |
| return *this; | |
| } | |
| bool Regex::Init(const std::string& regexp, Regex::CompareType compare_type) { | |
| if (valid()) | |
| return false; | |
| regex_t r; | |
| int flags = REG_EXTENDED; | |
| if (compare_type == Regex::CompareType::kCaseInsensitive) | |
| flags |= REG_ICASE; | |
| int status = regcomp(&r, regexp.c_str(), flags); | |
| if (status) { | |
| return false; | |
| } | |
| handle_ = r; | |
| return true; | |
| } | |
| bool Regex::Match(const std::string& candidate) const { | |
| FX_DCHECK(valid()); | |
| int status = regexec(&handle_.value(), candidate.c_str(), 0, nullptr, 0); | |
| return status == 0; | |
| } | |
| } // namespace debug_ipc |