Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Unified Diff: base/file_util_posix.cc

Issue 11293: Port directory lister to posix. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/file_util.h ('k') | base/file_util_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/file_util_posix.cc
===================================================================
--- base/file_util_posix.cc (revision 5643)
+++ base/file_util_posix.cc (working copy)
@@ -409,6 +409,16 @@
fts_close(fts_);
}
+void FileEnumerator::GetFindInfo(FindInfo* info) {
+ DCHECK(info);
+
+ if (!is_in_find_op_)
+ return;
+
+ memcpy(&(info->stat), fts_ent_->fts_statp, sizeof(info->stat));
+ info->filename.assign(fts_ent_->fts_name);
+}
+
// As it stands, this method calls itself recursively when the next item of
// the fts enumeration doesn't match (type, pattern, etc.). In the case of
// large directories with many files this can be quite deep.
@@ -417,12 +427,12 @@
if (!is_in_find_op_) {
if (pending_paths_.empty())
return std::wstring();
-
+
// The last find FindFirstFile operation is done, prepare a new one.
root_path_ = pending_paths_.top();
TrimTrailingSeparator(&root_path_);
pending_paths_.pop();
-
+
// Start a new find operation.
int ftsflags = FTS_LOGICAL;
char top_dir[PATH_MAX];
@@ -433,41 +443,41 @@
return Next();
is_in_find_op_ = true;
}
-
- FTSENT* fts_ent = fts_read(fts_);
- if (fts_ent == NULL) {
+
+ fts_ent_ = fts_read(fts_);
+ if (fts_ent_ == NULL) {
fts_close(fts_);
fts_ = NULL;
is_in_find_op_ = false;
return Next();
}
-
+
// Level 0 is the top, which is always skipped.
- if (fts_ent->fts_level == 0)
+ if (fts_ent_->fts_level == 0)
return Next();
-
+
// Patterns are only matched on the items in the top-most directory.
// (see Windows implementation)
- if (fts_ent->fts_level == 1 && pattern_.length() > 0) {
- if (fnmatch(WideToUTF8(pattern_).c_str(), fts_ent->fts_path, 0) != 0) {
- if (fts_ent->fts_info == FTS_D)
- fts_set(fts_, fts_ent, FTS_SKIP);
+ if (fts_ent_->fts_level == 1 && pattern_.length() > 0) {
+ if (fnmatch(WideToUTF8(pattern_).c_str(), fts_ent_->fts_path, 0) != 0) {
+ if (fts_ent_->fts_info == FTS_D)
+ fts_set(fts_, fts_ent_, FTS_SKIP);
return Next();
}
}
-
- std::wstring cur_file(UTF8ToWide(fts_ent->fts_path));
- if (fts_ent->fts_info == FTS_D) {
+
+ std::wstring cur_file(UTF8ToWide(fts_ent_->fts_path));
+ if (fts_ent_->fts_info == FTS_D) {
// If not recursive, then prune children.
if (!recursive_)
- fts_set(fts_, fts_ent, FTS_SKIP);
+ fts_set(fts_, fts_ent_, FTS_SKIP);
return (file_type_ & FileEnumerator::DIRECTORIES) ? cur_file : Next();
- } else if (fts_ent->fts_info == FTS_F) {
+ } else if (fts_ent_->fts_info == FTS_F) {
return (file_type_ & FileEnumerator::FILES) ? cur_file : Next();
}
// TODO(erikkay) - verify that the other fts_info types aren't interesting
return Next();
}
-
-
+
+
} // namespace file_util
« no previous file with comments | « base/file_util.h ('k') | base/file_util_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698