1f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/* 2f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * 4f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org */ 10f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 11f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#if defined(WEBRTC_WIN) 12f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/win32.h" 13f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include <shellapi.h> 14f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include <shlobj.h> 15f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include <tchar.h> 16f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif // WEBRTC_WIN 17f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 18f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/common.h" 19f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/fileutils.h" 20f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/logging.h" 21f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/pathutils.h" 22f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/stringutils.h" 23f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/urlencode.h" 24f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 25f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgnamespace rtc { 26f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 27f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstatic const char EMPTY_STR[] = ""; 28f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 29f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// EXT_DELIM separates a file basename from extension 30f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgconst char EXT_DELIM = '.'; 31f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 32f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// FOLDER_DELIMS separate folder segments and the filename 33f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgconst char* const FOLDER_DELIMS = "/\\"; 34f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 35f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// DEFAULT_FOLDER_DELIM is the preferred delimiter for this platform 36f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#if WEBRTC_WIN 37f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgconst char DEFAULT_FOLDER_DELIM = '\\'; 38f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#else // !WEBRTC_WIN 39f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgconst char DEFAULT_FOLDER_DELIM = '/'; 40f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif // !WEBRTC_WIN 41f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 42f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/////////////////////////////////////////////////////////////////////////////// 43f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// Pathname - parsing of pathnames into components, and vice versa 44f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/////////////////////////////////////////////////////////////////////////////// 45f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 46f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool Pathname::IsFolderDelimiter(char ch) { 47f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return (NULL != ::strchr(FOLDER_DELIMS, ch)); 48f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 49f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 50f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgchar Pathname::DefaultFolderDelimiter() { 51f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return DEFAULT_FOLDER_DELIM; 52f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 53f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 54f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgPathname::Pathname() 55f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org : folder_delimiter_(DEFAULT_FOLDER_DELIM) { 56f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 57f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 58f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgPathname::Pathname(const std::string& pathname) 59f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org : folder_delimiter_(DEFAULT_FOLDER_DELIM) { 60f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org SetPathname(pathname); 61f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 62f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 63f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgPathname::Pathname(const std::string& folder, const std::string& filename) 64f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org : folder_delimiter_(DEFAULT_FOLDER_DELIM) { 65f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org SetPathname(folder, filename); 66f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 67f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 68f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgvoid Pathname::SetFolderDelimiter(char delimiter) { 69f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org ASSERT(IsFolderDelimiter(delimiter)); 70f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org folder_delimiter_ = delimiter; 71f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 72f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 73f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgvoid Pathname::Normalize() { 74f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org for (size_t i=0; i<folder_.length(); ++i) { 75f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (IsFolderDelimiter(folder_[i])) { 76f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org folder_[i] = folder_delimiter_; 77f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 78f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 79f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 80f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 81f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgvoid Pathname::clear() { 82f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org folder_.clear(); 83f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org basename_.clear(); 84f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org extension_.clear(); 85f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 86f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 87f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool Pathname::empty() const { 88f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return folder_.empty() && basename_.empty() && extension_.empty(); 89f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 90f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 91f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstd::string Pathname::pathname() const { 92f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string pathname(folder_); 93f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org pathname.append(basename_); 94f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org pathname.append(extension_); 95f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (pathname.empty()) { 96f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Instead of the empty pathname, return the current working directory. 97f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org pathname.push_back('.'); 98f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org pathname.push_back(folder_delimiter_); 99f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 100f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return pathname; 101f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 102f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 103f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstd::string Pathname::url() const { 104f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string s = "file:///"; 105f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org for (size_t i=0; i<folder_.length(); ++i) { 106f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (IsFolderDelimiter(folder_[i])) 107f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org s += '/'; 108f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org else 109f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org s += folder_[i]; 110f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 111f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org s += basename_; 112f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org s += extension_; 113f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return UrlEncodeStringForOnlyUnsafeChars(s); 114f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 115f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 116f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgvoid Pathname::SetPathname(const std::string& pathname) { 117f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string::size_type pos = pathname.find_last_of(FOLDER_DELIMS); 118f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (pos != std::string::npos) { 119f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org SetFolder(pathname.substr(0, pos + 1)); 120f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org SetFilename(pathname.substr(pos + 1)); 121f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 122f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org SetFolder(EMPTY_STR); 123f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org SetFilename(pathname); 124f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 125f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 126f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 127f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgvoid Pathname::SetPathname(const std::string& folder, 128f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const std::string& filename) { 129f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org SetFolder(folder); 130f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org SetFilename(filename); 131f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 132f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 133f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgvoid Pathname::AppendPathname(const std::string& pathname) { 134f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string full_pathname(folder_); 135f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org full_pathname.append(pathname); 136f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org SetPathname(full_pathname); 137f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 138f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 139f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstd::string Pathname::folder() const { 140f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return folder_; 141f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 142f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 143f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstd::string Pathname::folder_name() const { 144f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string::size_type pos = std::string::npos; 145f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (folder_.size() >= 2) { 146f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org pos = folder_.find_last_of(FOLDER_DELIMS, folder_.length() - 2); 147f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 148f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (pos != std::string::npos) { 149f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return folder_.substr(pos + 1); 150f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 151f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return folder_; 152f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 153f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 154f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 155f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstd::string Pathname::parent_folder() const { 156f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string::size_type pos = std::string::npos; 157f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (folder_.size() >= 2) { 158f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org pos = folder_.find_last_of(FOLDER_DELIMS, folder_.length() - 2); 159f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 160f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (pos != std::string::npos) { 161f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return folder_.substr(0, pos + 1); 162f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 163f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return EMPTY_STR; 164f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 165f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 166f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 167f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgvoid Pathname::SetFolder(const std::string& folder) { 168f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org folder_.assign(folder); 169f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Ensure folder ends in a path delimiter 170f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!folder_.empty() && !IsFolderDelimiter(folder_[folder_.length()-1])) { 171f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org folder_.push_back(folder_delimiter_); 172f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 173f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 174f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 175f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgvoid Pathname::AppendFolder(const std::string& folder) { 176f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org folder_.append(folder); 177f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Ensure folder ends in a path delimiter 178f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!folder_.empty() && !IsFolderDelimiter(folder_[folder_.length()-1])) { 179f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org folder_.push_back(folder_delimiter_); 180f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 181f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 182f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 183f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstd::string Pathname::basename() const { 184f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return basename_; 185f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 186f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 187f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool Pathname::SetBasename(const std::string& basename) { 188f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if(basename.find_first_of(FOLDER_DELIMS) != std::string::npos) { 189f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 190f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 191f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org basename_.assign(basename); 192f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 193f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 194f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 195f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstd::string Pathname::extension() const { 196f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return extension_; 197f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 198f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 199f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool Pathname::SetExtension(const std::string& extension) { 200f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (extension.find_first_of(FOLDER_DELIMS) != std::string::npos || 201f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org extension.find_first_of(EXT_DELIM, 1) != std::string::npos) { 202f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 203f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 204f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org extension_.assign(extension); 205f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Ensure extension begins with the extension delimiter 206f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (!extension_.empty() && (extension_[0] != EXT_DELIM)) { 207f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org extension_.insert(extension_.begin(), EXT_DELIM); 208f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 209f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return true; 210f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 211f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 212f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgstd::string Pathname::filename() const { 213f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string filename(basename_); 214f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org filename.append(extension_); 215f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return filename; 216f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 217f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 218f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgbool Pathname::SetFilename(const std::string& filename) { 219f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string::size_type pos = filename.rfind(EXT_DELIM); 220f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if ((pos == std::string::npos) || (pos == 0)) { 221f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return SetExtension(EMPTY_STR) && SetBasename(filename); 222f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } else { 223f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return SetExtension(filename.substr(pos)) && SetBasename(filename.substr(0, pos)); 224f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 225f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 226f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 227f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#if defined(WEBRTC_WIN) 2280c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boströmbool Pathname::GetDrive(char* drive, uint32_t bytes) const { 229f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return GetDrive(drive, bytes, folder_); 230f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 231f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 232f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// static 2330c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boströmbool Pathname::GetDrive(char* drive, 2340c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t bytes, 235f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const std::string& pathname) { 236f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // need at lease 4 bytes to save c: 237f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org if (bytes < 4 || pathname.size() < 3) { 238f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return false; 239f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org } 240f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 241f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org memcpy(drive, pathname.c_str(), 3); 242f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org drive[3] = 0; 243f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // sanity checking 244f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org return (isalpha(drive[0]) && 245f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org drive[1] == ':' && 246f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org drive[2] == '\\'); 247f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} 248f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif 249f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 250f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/////////////////////////////////////////////////////////////////////////////// 251f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 252f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} // namespace rtc 253