| Index: native_client_sdk/src/libraries/nacl_mounts/path.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_mounts/path.cc b/native_client_sdk/src/libraries/nacl_mounts/path.cc
|
| deleted file mode 100644
|
| index 57f36664c6d7e0f6b495a00dc4f115818083ec33..0000000000000000000000000000000000000000
|
| --- a/native_client_sdk/src/libraries/nacl_mounts/path.cc
|
| +++ /dev/null
|
| @@ -1,203 +0,0 @@
|
| -/* Copyright (c) 2012 The Chromium 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 "nacl_mounts/path.h"
|
| -
|
| -#include <stdio.h>
|
| -#include <string.h>
|
| -#include <string>
|
| -
|
| -Path::Path() {}
|
| -
|
| -Path::Path(const Path& path) {
|
| - paths_ = path.paths_;
|
| -}
|
| -
|
| -Path::Path(const std::string& path) {
|
| - Set(path);
|
| -}
|
| -
|
| -Path::~Path() {}
|
| -
|
| -bool Path::IsAbsolute() const {
|
| - return !paths_.empty() && paths_[0] == "/";
|
| -}
|
| -
|
| -const std::string& Path::Part(size_t index) const {
|
| - return paths_[index];
|
| -}
|
| -
|
| -size_t Path::Size() const {
|
| - return paths_.size();
|
| -}
|
| -
|
| -bool Path::Top() const {
|
| - return (paths_.size() == 0) || (paths_.size() == 1 && paths_[0] == "/");
|
| -}
|
| -
|
| -Path& Path::Append(const std::string& path) {
|
| - StringArray_t paths = Split(path);
|
| -
|
| - for (size_t index = 0; index < paths.size(); index++) {
|
| - // Skip ROOT
|
| - if (paths_.size() && index == 0 && paths[0] == "/") continue;
|
| - paths_.push_back(paths[index]);
|
| - }
|
| -
|
| - paths_ = Normalize(paths_);
|
| - return *this;
|
| -}
|
| -
|
| -Path& Path::Prepend(const std::string& path) {
|
| - StringArray_t paths = Split(path);
|
| -
|
| - for (size_t index = 0; index < paths_.size(); index++) {
|
| - // Skip ROOT
|
| - if (index == 0 && paths_[0] == "/") continue;
|
| - paths.push_back(paths[index]);
|
| - }
|
| - paths_ = Normalize(paths);
|
| - return *this;
|
| -}
|
| -
|
| -Path& Path::Set(const std::string& path) {
|
| - StringArray_t paths = Split(path);
|
| - paths_ = Normalize(paths);
|
| - return *this;
|
| -}
|
| -
|
| -Path Path::Parent() const {
|
| - Path out;
|
| - out.paths_ = paths_;
|
| - if (out.paths_.size()) out.paths_.pop_back();
|
| - return out;
|
| -}
|
| -
|
| -std::string Path::Basename() const {
|
| - if (paths_.size()) return paths_.back();
|
| - return std::string();
|
| -}
|
| -
|
| -std::string Path::Join() const {
|
| - return Range(paths_, 0, paths_.size());
|
| -}
|
| -
|
| -std::string Path::Range(size_t start, size_t end) const {
|
| - return Range(paths_, start, end);
|
| -}
|
| -
|
| -StringArray_t Path::Split() const {
|
| - return paths_;
|
| -}
|
| -
|
| -// static
|
| -StringArray_t Path::Normalize(const StringArray_t& paths) {
|
| - StringArray_t path_out;
|
| -
|
| - for (size_t index = 0; index < paths.size(); index++) {
|
| - const std::string &curr = paths[index];
|
| -
|
| - // Check if '/' was used excessively in the path.
|
| - // For example, in cd Desktop/////
|
| - if (curr == "/" && index != 0) continue;
|
| -
|
| - // Check for '.' in the path and remove it
|
| - if (curr == ".") continue;
|
| -
|
| - // Check for '..'
|
| - if (curr == "..") {
|
| - // If the path is empty, or "..", then add ".."
|
| - if (path_out.empty() || path_out.back() == "..") {
|
| - path_out.push_back(curr);
|
| - continue;
|
| - }
|
| -
|
| - // If the path is at root, "/.." = "/"
|
| - if (path_out.back() == "/") {
|
| - continue;
|
| - }
|
| -
|
| - // if we are already at root, then stay there (root/.. -> root)
|
| - if (path_out.back() == "/") {
|
| - continue;
|
| - }
|
| -
|
| - // otherwise, pop off the top path component
|
| - path_out.pop_back();
|
| - continue;
|
| - }
|
| -
|
| - // By now, we should have handled end cases so just append.
|
| - path_out.push_back(curr);
|
| - }
|
| -
|
| - // If the path was valid, but now it's empty, return self
|
| - if (path_out.size() == 0) path_out.push_back(".");
|
| -
|
| - return path_out;
|
| -}
|
| -
|
| -// static
|
| -std::string Path::Join(const StringArray_t& paths) {
|
| - return Range(paths, 0, paths.size());
|
| -}
|
| -
|
| -// static
|
| -std::string Path::Range(const StringArray_t& paths, size_t start, size_t end) {
|
| - std::string out_path;
|
| - size_t index = start;
|
| -
|
| - if (end > paths.size()) end = paths.size();
|
| -
|
| - // If this is an absolute path, paths[0] == "/". In this case, we don't want
|
| - // to add an additional / separator.
|
| - if (start == 0 && end > 0 && paths[0] == "/") {
|
| - out_path += "/";
|
| - index++;
|
| - }
|
| -
|
| - for (; index < end; index++) {
|
| - out_path += paths[index];
|
| - if (index < end - 1)
|
| - out_path += "/";
|
| - }
|
| -
|
| - return out_path;
|
| -}
|
| -
|
| -// static
|
| -StringArray_t Path::Split(const std::string& path) {
|
| - StringArray_t components;
|
| - size_t offs = 0;
|
| - size_t next = 0;
|
| -
|
| - if (path[0] == '/') {
|
| - offs = 1;
|
| - components.push_back("/");
|
| - }
|
| -
|
| - while (next != std::string::npos) {
|
| - next = path.find('/', offs);
|
| -
|
| - // Remove extra seperators
|
| - if (next == offs) {
|
| - ++offs;
|
| - continue;
|
| - }
|
| -
|
| - std::string part = path.substr(offs, next - offs);
|
| - if (!part.empty()) components.push_back(part);
|
| - offs = next + 1;
|
| - }
|
| - return components;
|
| -}
|
| -
|
| -Path& Path::operator =(const Path& p) {
|
| - paths_ = p.paths_;
|
| - return *this;
|
| -}
|
| -
|
| -Path& Path::operator =(const std::string& p) {
|
| - return Set(p);
|
| -}
|
|
|