root/chrome/browser/local_discovery/storage/path_util.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. UnescapeSlashes
  2. PathStringToString
  3. NormalizeFilePath

// Copyright 2014 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 "chrome/browser/local_discovery/storage/path_util.h"

#include <algorithm>

#include "base/logging.h"
#include "base/strings/utf_string_conversions.h"

namespace local_discovery {

namespace {

std::string UnescapeSlashes(const std::string& str) {
  std::string output = "";
  for (size_t i = 0; i < str.length(); i++) {
    if (str[i] == '$') {
      i++;
      switch (str[i]) {
        case 's':
          output += '/';
          break;
        case 'b':
          output += '\\';
        break;
        case '$':
          output += '$';
          break;
        default:
          NOTREACHED();
      }
    } else {
      output += str[i];
    }
  }

  return output;
}

const size_t kNumComponentsInBasePrivetPath = 4;
const int kIndexOfServiceNameInComponentList = 2;

std::string PathStringToString(const base::FilePath::StringType& string) {
#if defined(OS_WIN)
  return base::UTF16ToUTF8(string);
#else
  return string;
#endif
}

}  // namespace

base::FilePath NormalizeFilePath(const base::FilePath& path) {
#if defined(OS_WIN)
  base::FilePath::StringType path_updated_string = path.value();

  std::replace(path_updated_string.begin(),
               path_updated_string.end(),
               static_cast<base::FilePath::CharType>('\\'),
               static_cast<base::FilePath::CharType>('/'));
  return base::FilePath(path_updated_string);
#else
  return path;
#endif
}

ParsedPrivetPath::ParsedPrivetPath(const base::FilePath& file_path) {
  std::vector<base::FilePath::StringType> components;
  file_path.GetComponents(&components);
  DCHECK(components.size() >= kNumComponentsInBasePrivetPath);
  service_name = UnescapeSlashes(PathStringToString(
      components[kIndexOfServiceNameInComponentList]));


  for (size_t i = kNumComponentsInBasePrivetPath; i < components.size(); i++) {
    path += '/' + PathStringToString(components[i]);
  }

  if (path.empty()) path = "/";
}

ParsedPrivetPath::~ParsedPrivetPath() {
}

}  // namespace local_discovery

/* [<][>][^][v][top][bottom][index][help] */