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

Side by Side Diff: base/file_util_posix.cc

Issue 87039: Fixes for comments on the review 87003.... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 years, 8 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | base/file_util_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/file_util.h" 5 #include "base/file_util.h"
6 6
7 #include <dirent.h> 7 #include <dirent.h>
8 #include <errno.h> 8 #include <errno.h>
9 #include <fcntl.h> 9 #include <fcntl.h>
10 #include <fnmatch.h> 10 #include <fnmatch.h>
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 *path = FilePath(full_path); 54 *path = FilePath(full_path);
55 return true; 55 return true;
56 } 56 }
57 57
58 int CountFilesCreatedAfter(const FilePath& path, 58 int CountFilesCreatedAfter(const FilePath& path,
59 const base::Time& comparison_time) { 59 const base::Time& comparison_time) {
60 int file_count = 0; 60 int file_count = 0;
61 61
62 DIR* dir = opendir(path.value().c_str()); 62 DIR* dir = opendir(path.value().c_str());
63 if (dir) { 63 if (dir) {
64 struct dirent ent_buf;
64 struct dirent* ent; 65 struct dirent* ent;
65 while ((ent = readdir(dir)) != NULL) { 66 while (readdir_r(dir, &ent_buf, &ent) == 0 && ent) {
66 if ((strcmp(ent->d_name, ".") == 0) || 67 if ((strcmp(ent->d_name, ".") == 0) ||
67 (strcmp(ent->d_name, "..") == 0)) 68 (strcmp(ent->d_name, "..") == 0))
68 continue; 69 continue;
69 70
70 struct stat64 st; 71 struct stat64 st;
71 int test = stat64(path.Append(ent->d_name).value().c_str(), &st); 72 int test = stat64(path.Append(ent->d_name).value().c_str(), &st);
72 if (test != 0) { 73 if (test != 0) {
73 LOG(ERROR) << "stat64 failed: " << strerror(errno); 74 LOG(ERROR) << "stat64 failed: " << strerror(errno);
74 continue; 75 continue;
75 } 76 }
77 // Here, we use Time::TimeT(), which discards microseconds. This
78 // means that files which are newer than |comparison_time| may
79 // be considered older. If we don't discard microseconds, it
80 // introduces another issue. Suppose the following case:
81 //
82 // 1. Get |comparison_time| by Time::Now() and the value is 10.1 (secs).
83 // 2. Create a file and the current time is 10.3 (secs).
84 //
85 // As POSIX doesn't have microsecond precision for |st_ctime|,
86 // the creation time of the file created in the step 2 is 10 and
87 // the file is considered older than |comparison_time|. After
88 // all, we may have to accept either of the two issues: 1. files
89 // which are older than |comparison_time| are considered newer
90 // (current implementation) 2. files newer than
91 // |comparison_time| are considered older.
76 if (st.st_ctime >= comparison_time.ToTimeT()) 92 if (st.st_ctime >= comparison_time.ToTimeT())
77 ++file_count; 93 ++file_count;
78 } 94 }
79 closedir(dir); 95 closedir(dir);
80 } 96 }
81 return file_count; 97 return file_count;
82 } 98 }
83 99
84 // TODO(erikkay): The Windows version of this accepts paths like "foo/bar/*" 100 // TODO(erikkay): The Windows version of this accepts paths like "foo/bar/*"
85 // which works both with and without the recursive flag. I'm not sure we need 101 // which works both with and without the recursive flag. I'm not sure we need
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 munmap(data_, length_); 630 munmap(data_, length_);
615 if (file_ != -1) 631 if (file_ != -1)
616 close(file_); 632 close(file_);
617 633
618 data_ = NULL; 634 data_ = NULL;
619 length_ = 0; 635 length_ = 0;
620 file_ = -1; 636 file_ = -1;
621 } 637 }
622 638
623 } // namespace file_util 639 } // namespace file_util
OLDNEW
« no previous file with comments | « no previous file | base/file_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698