diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-11 23:27:47 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-11 23:27:47 +0000 |
commit | 1525c68ec291218d831e29ea34aaf5a516daf855 (patch) | |
tree | 50dfc5908f79cdee9ceca8a6d82bcd13c6427000 /net | |
parent | d7e2df1d26c084d299feec37695aacd211dae073 (diff) | |
download | chromium_src-1525c68ec291218d831e29ea34aaf5a516daf855.zip chromium_src-1525c68ec291218d831e29ea34aaf5a516daf855.tar.gz chromium_src-1525c68ec291218d831e29ea34aaf5a516daf855.tar.bz2 |
Make sure the parent directory always comes first when listing directories.
BUG=35288
TEST=see bug
Review URL: http://codereview.chromium.org/596054
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38854 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/base/directory_lister.cc | 17 | ||||
-rw-r--r-- | net/base/directory_lister_unittest.cc | 12 |
2 files changed, 14 insertions, 15 deletions
diff --git a/net/base/directory_lister.cc b/net/base/directory_lister.cc index ef3130b..ab45e2f 100644 --- a/net/base/directory_lister.cc +++ b/net/base/directory_lister.cc @@ -41,18 +41,21 @@ class DirectoryDataEvent : public Task { // comparison function on the filenames for sorting in the user's locale. static bool CompareFindInfo(const file_util::FileEnumerator::FindInfo& a, const file_util::FileEnumerator::FindInfo& b) { + // Parent directory before all else. + if (file_util::IsDotDot(file_util::FileEnumerator::GetFilename(a))) + return true; + if (file_util::IsDotDot(file_util::FileEnumerator::GetFilename(b))) + return false; + + // Directories before regular files. bool a_is_directory = file_util::FileEnumerator::IsDirectory(a); bool b_is_directory = file_util::FileEnumerator::IsDirectory(b); if (a_is_directory != b_is_directory) return a_is_directory; -#if defined(OS_WIN) - return file_util::LocaleAwareCompareFilenames(FilePath(a.cFileName), - FilePath(b.cFileName)); -#elif defined(OS_POSIX) - return file_util::LocaleAwareCompareFilenames(FilePath(a.filename), - FilePath(b.filename)); -#endif + return file_util::LocaleAwareCompareFilenames( + file_util::FileEnumerator::GetFilename(a), + file_util::FileEnumerator::GetFilename(b)); } DirectoryLister::DirectoryLister(const FilePath& dir, diff --git a/net/base/directory_lister_unittest.cc b/net/base/directory_lister_unittest.cc index 85e2b647..f3cd33b 100644 --- a/net/base/directory_lister_unittest.cc +++ b/net/base/directory_lister_unittest.cc @@ -35,17 +35,13 @@ class ListerDelegate : public net::DirectoryLister::DirectoryListerDelegate { !file_util::FileEnumerator::IsDirectory(file_list_[current])) { continue; } + EXPECT_FALSE(file_util::IsDotDot( + file_util::FileEnumerator::GetFilename(file_list_[current]))); EXPECT_EQ(file_util::FileEnumerator::IsDirectory(file_list_[previous]), file_util::FileEnumerator::IsDirectory(file_list_[current])); -#if defined(OS_WIN) EXPECT_TRUE(file_util::LocaleAwareCompareFilenames( - FilePath(file_list_[previous].cFileName), - FilePath(file_list_[current].cFileName))); -#elif defined(OS_POSIX) - EXPECT_TRUE(file_util::LocaleAwareCompareFilenames( - FilePath(file_list_[previous].filename), - FilePath(file_list_[current].filename))); -#endif + file_util::FileEnumerator::GetFilename(file_list_[previous]), + file_util::FileEnumerator::GetFilename(file_list_[current]))); } } } |