| Index: base/files/file_path.cc
|
| diff --git a/base/files/file_path.cc b/base/files/file_path.cc
|
| index 407ec855b2d7ad06273715e51313fb7275285f3c..a96c710bcbfd873387685b5b3abdc61824221020 100644
|
| --- a/base/files/file_path.cc
|
| +++ b/base/files/file_path.cc
|
| @@ -16,6 +16,7 @@
|
| #include "base/string_piece.h"
|
| #include "base/string_util.h"
|
| #include "base/strings/sys_string_conversions.h"
|
| +#include "base/threading/thread_restrictions.h"
|
| #include "base/utf_string_conversions.h"
|
|
|
| #if defined(OS_MACOSX)
|
| @@ -521,6 +522,45 @@ bool FilePath::IsAbsolute() const {
|
| return IsPathAbsolute(path_);
|
| }
|
|
|
| +FilePath FilePath::AsAbsolute() const {
|
| + base::ThreadRestrictions::AssertIOAllowed();
|
| +
|
| +#if defined(OS_WIN)
|
| + wchar_t file_path[MAX_PATH];
|
| + if (!_wfullpath(file_path, path_.c_str(), MAX_PATH))
|
| + return FilePath();
|
| + return FilePath(file_path);
|
| +#elif defined(OS_NACL)
|
| + // Nacl doesn't have realpath and there's not a lot you can do inside the
|
| + // sandbox with files.
|
| + // TODO(brettw) implement something more reasonable if we need it.
|
| + return *this;
|
| +#elif defined(OS_POSIX)
|
| + char full_path[PATH_MAX];
|
| + if (realpath(path_.c_str(), full_path) == NULL)
|
| + return FilePath();
|
| + return FilePath(full_path);
|
| +#endif
|
| +}
|
| +
|
| +bool FilePath::EndsWithSeparator() const {
|
| + if (empty())
|
| + return false;
|
| + return IsSeparator(path_[path_.size() - 1]);
|
| +}
|
| +
|
| +FilePath FilePath::AsEndingWithSeparator() const {
|
| + if (EndsWithSeparator())
|
| + return *this;
|
| +
|
| + StringType path_str;
|
| + path_str.reserve(path_.length() + 1); // Only allocate string once.
|
| +
|
| + path_str = path_;
|
| + path_str.append(&kSeparators[0], 1);
|
| + return FilePath(path_str);
|
| +}
|
| +
|
| FilePath FilePath::StripTrailingSeparators() const {
|
| FilePath new_path(path_);
|
| new_path.StripTrailingSeparatorsInternal();
|
|
|