| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 } | 63 } |
| 64 | 64 |
| 65 Pathname::Pathname(const std::string& folder, const std::string& filename) | 65 Pathname::Pathname(const std::string& folder, const std::string& filename) |
| 66 : folder_delimiter_(DEFAULT_FOLDER_DELIM) { | 66 : folder_delimiter_(DEFAULT_FOLDER_DELIM) { |
| 67 SetPathname(folder, filename); | 67 SetPathname(folder, filename); |
| 68 } | 68 } |
| 69 | 69 |
| 70 Pathname& Pathname::operator=(const Pathname&) = default; | 70 Pathname& Pathname::operator=(const Pathname&) = default; |
| 71 Pathname& Pathname::operator=(Pathname&&) = default; | 71 Pathname& Pathname::operator=(Pathname&&) = default; |
| 72 | 72 |
| 73 void Pathname::SetFolderDelimiter(char delimiter) { | |
| 74 RTC_DCHECK(IsFolderDelimiter(delimiter)); | |
| 75 folder_delimiter_ = delimiter; | |
| 76 } | |
| 77 | |
| 78 void Pathname::Normalize() { | 73 void Pathname::Normalize() { |
| 79 for (size_t i=0; i<folder_.length(); ++i) { | 74 for (size_t i=0; i<folder_.length(); ++i) { |
| 80 if (IsFolderDelimiter(folder_[i])) { | 75 if (IsFolderDelimiter(folder_[i])) { |
| 81 folder_[i] = folder_delimiter_; | 76 folder_[i] = folder_delimiter_; |
| 82 } | 77 } |
| 83 } | 78 } |
| 84 } | 79 } |
| 85 | 80 |
| 86 void Pathname::clear() { | 81 void Pathname::clear() { |
| 87 folder_.clear(); | 82 folder_.clear(); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 115 SetFilename(pathname); | 110 SetFilename(pathname); |
| 116 } | 111 } |
| 117 } | 112 } |
| 118 | 113 |
| 119 void Pathname::SetPathname(const std::string& folder, | 114 void Pathname::SetPathname(const std::string& folder, |
| 120 const std::string& filename) { | 115 const std::string& filename) { |
| 121 SetFolder(folder); | 116 SetFolder(folder); |
| 122 SetFilename(filename); | 117 SetFilename(filename); |
| 123 } | 118 } |
| 124 | 119 |
| 125 void Pathname::AppendPathname(const std::string& pathname) { | |
| 126 std::string full_pathname(folder_); | |
| 127 full_pathname.append(pathname); | |
| 128 SetPathname(full_pathname); | |
| 129 } | |
| 130 | |
| 131 std::string Pathname::folder() const { | 120 std::string Pathname::folder() const { |
| 132 return folder_; | 121 return folder_; |
| 133 } | 122 } |
| 134 | 123 |
| 135 std::string Pathname::folder_name() const { | |
| 136 std::string::size_type pos = std::string::npos; | |
| 137 if (folder_.size() >= 2) { | |
| 138 pos = folder_.find_last_of(FOLDER_DELIMS, folder_.length() - 2); | |
| 139 } | |
| 140 if (pos != std::string::npos) { | |
| 141 return folder_.substr(pos + 1); | |
| 142 } else { | |
| 143 return folder_; | |
| 144 } | |
| 145 } | |
| 146 | |
| 147 std::string Pathname::parent_folder() const { | 124 std::string Pathname::parent_folder() const { |
| 148 std::string::size_type pos = std::string::npos; | 125 std::string::size_type pos = std::string::npos; |
| 149 if (folder_.size() >= 2) { | 126 if (folder_.size() >= 2) { |
| 150 pos = folder_.find_last_of(FOLDER_DELIMS, folder_.length() - 2); | 127 pos = folder_.find_last_of(FOLDER_DELIMS, folder_.length() - 2); |
| 151 } | 128 } |
| 152 if (pos != std::string::npos) { | 129 if (pos != std::string::npos) { |
| 153 return folder_.substr(0, pos + 1); | 130 return folder_.substr(0, pos + 1); |
| 154 } else { | 131 } else { |
| 155 return EMPTY_STR; | 132 return EMPTY_STR; |
| 156 } | 133 } |
| 157 } | 134 } |
| 158 | 135 |
| 159 void Pathname::SetFolder(const std::string& folder) { | 136 void Pathname::SetFolder(const std::string& folder) { |
| 160 folder_.assign(folder); | 137 folder_.assign(folder); |
| 161 // Ensure folder ends in a path delimiter | 138 // Ensure folder ends in a path delimiter |
| 162 if (!folder_.empty() && !IsFolderDelimiter(folder_[folder_.length()-1])) { | 139 if (!folder_.empty() && !IsFolderDelimiter(folder_[folder_.length()-1])) { |
| 163 folder_.push_back(folder_delimiter_); | 140 folder_.push_back(folder_delimiter_); |
| 164 } | 141 } |
| 165 } | 142 } |
| 166 | 143 |
| 167 void Pathname::AppendFolder(const std::string& folder) { | 144 void Pathname::AppendFolder(const std::string& folder) { |
| 168 folder_.append(folder); | 145 folder_.append(folder); |
| 169 // Ensure folder ends in a path delimiter | 146 // Ensure folder ends in a path delimiter |
| 170 if (!folder_.empty() && !IsFolderDelimiter(folder_[folder_.length()-1])) { | 147 if (!folder_.empty() && !IsFolderDelimiter(folder_[folder_.length()-1])) { |
| 171 folder_.push_back(folder_delimiter_); | 148 folder_.push_back(folder_delimiter_); |
| 172 } | 149 } |
| 173 } | 150 } |
| 174 | 151 |
| 175 std::string Pathname::basename() const { | |
| 176 return basename_; | |
| 177 } | |
| 178 | |
| 179 bool Pathname::SetBasename(const std::string& basename) { | 152 bool Pathname::SetBasename(const std::string& basename) { |
| 180 if(basename.find_first_of(FOLDER_DELIMS) != std::string::npos) { | 153 if(basename.find_first_of(FOLDER_DELIMS) != std::string::npos) { |
| 181 return false; | 154 return false; |
| 182 } | 155 } |
| 183 basename_.assign(basename); | 156 basename_.assign(basename); |
| 184 return true; | 157 return true; |
| 185 } | 158 } |
| 186 | 159 |
| 187 std::string Pathname::extension() const { | |
| 188 return extension_; | |
| 189 } | |
| 190 | |
| 191 bool Pathname::SetExtension(const std::string& extension) { | 160 bool Pathname::SetExtension(const std::string& extension) { |
| 192 if (extension.find_first_of(FOLDER_DELIMS) != std::string::npos || | 161 if (extension.find_first_of(FOLDER_DELIMS) != std::string::npos || |
| 193 extension.find_first_of(EXT_DELIM, 1) != std::string::npos) { | 162 extension.find_first_of(EXT_DELIM, 1) != std::string::npos) { |
| 194 return false; | 163 return false; |
| 195 } | 164 } |
| 196 extension_.assign(extension); | 165 extension_.assign(extension); |
| 197 // Ensure extension begins with the extension delimiter | 166 // Ensure extension begins with the extension delimiter |
| 198 if (!extension_.empty() && (extension_[0] != EXT_DELIM)) { | 167 if (!extension_.empty() && (extension_[0] != EXT_DELIM)) { |
| 199 extension_.insert(extension_.begin(), EXT_DELIM); | 168 extension_.insert(extension_.begin(), EXT_DELIM); |
| 200 } | 169 } |
| 201 return true; | 170 return true; |
| 202 } | 171 } |
| 203 | 172 |
| 204 std::string Pathname::filename() const { | 173 std::string Pathname::filename() const { |
| 205 std::string filename(basename_); | 174 std::string filename(basename_); |
| 206 filename.append(extension_); | 175 filename.append(extension_); |
| 207 return filename; | 176 return filename; |
| 208 } | 177 } |
| 209 | 178 |
| 210 bool Pathname::SetFilename(const std::string& filename) { | 179 bool Pathname::SetFilename(const std::string& filename) { |
| 211 std::string::size_type pos = filename.rfind(EXT_DELIM); | 180 std::string::size_type pos = filename.rfind(EXT_DELIM); |
| 212 if ((pos == std::string::npos) || (pos == 0)) { | 181 if ((pos == std::string::npos) || (pos == 0)) { |
| 213 return SetExtension(EMPTY_STR) && SetBasename(filename); | 182 return SetExtension(EMPTY_STR) && SetBasename(filename); |
| 214 } else { | 183 } else { |
| 215 return SetExtension(filename.substr(pos)) && SetBasename(filename.substr(0,
pos)); | 184 return SetExtension(filename.substr(pos)) && SetBasename(filename.substr(0,
pos)); |
| 216 } | 185 } |
| 217 } | 186 } |
| 218 | 187 |
| 219 #if defined(WEBRTC_WIN) | |
| 220 bool Pathname::GetDrive(char* drive, uint32_t bytes) const { | |
| 221 return GetDrive(drive, bytes, folder_); | |
| 222 } | |
| 223 | |
| 224 // static | |
| 225 bool Pathname::GetDrive(char* drive, | |
| 226 uint32_t bytes, | |
| 227 const std::string& pathname) { | |
| 228 // need at lease 4 bytes to save c: | |
| 229 if (bytes < 4 || pathname.size() < 3) { | |
| 230 return false; | |
| 231 } | |
| 232 | |
| 233 memcpy(drive, pathname.c_str(), 3); | |
| 234 drive[3] = 0; | |
| 235 // sanity checking | |
| 236 return (isalpha(drive[0]) && | |
| 237 drive[1] == ':' && | |
| 238 drive[2] == '\\'); | |
| 239 } | |
| 240 #endif | |
| 241 | |
| 242 /////////////////////////////////////////////////////////////////////////////// | 188 /////////////////////////////////////////////////////////////////////////////// |
| 243 | 189 |
| 244 } // namespace rtc | 190 } // namespace rtc |
| OLD | NEW |