blob: 9fdb7d2b2159aa75c2d6deb52d034caaaabdd0be [file] [log] [blame]
// 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.
#ifndef SRC_DEVELOPER_DEBUG_ZXDB_COMMON_FILE_UTIL_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_COMMON_FILE_UTIL_H_
#include <ctime>
#include <string>
#include <string_view>
namespace zxdb {
// Extracts the substring into the given file path of the last path component (the stuff following
// the last slash). If the path ends in a slash, it will return an empty StringView. If the input
// has no slash, it will return the whole thing.
std::string_view ExtractLastFileComponent(std::string_view path);
// Returns true if the given file path is absolute (begins with a slash). The contents could still
// have relative components ("/foo/../bar" is still absolute).
bool IsPathAbsolute(const std::string& path);
// Returns true if the given |path| matches the |right_query| from the right-hand side. This
// requires both that the |path| end in |right_query| (case-sensitive) AND the start of the match is
// either the beginning of |path| or immediately following a path separator.
//
// Examples:
// path = "foo.cc", right_query = "foo.cc" => TRUE
// path = "bar/foo.cc", right_query = "foo.cc" => TRUE
// path = "foo.cc", right_query = "o.cc" => FALSE
bool PathContainsFromRight(std::string_view path, std::string_view right_query);
// Concatenates the two path components with a slash in between them. "first" can end with a slash
// or not. The second component shouldn't begin with a slash.
std::string CatPathComponents(const std::string& first, const std::string& second);
// Returns the modification time of the given file, or 0 if it could not be determined.
std::time_t GetFileModificationTime(const std::string& path);
} // namespace zxdb
#endif // SRC_DEVELOPER_DEBUG_ZXDB_COMMON_FILE_UTIL_H_