[llvm-commits] CVS: llvm/lib/System/Unix/Path.inc
Reid Spencer
reid at x10sys.com
Thu Mar 29 09:43:41 PDT 2007
Changes in directory llvm/lib/System/Unix:
Path.inc updated: 1.58 -> 1.59
---
Log message:
For PR789: http://llvm.org/PR789 :
* Add a method: bool isAbsolute() const, which determines if the path name
is absolute or not.
* Implement caching of file status information in the Path object. Allow it
to be updated forcefully or lazily re-fetched from the cached value.
---
Diffs of the changes: (+22 -12)
Path.inc | 34 ++++++++++++++++++++++------------
1 files changed, 22 insertions(+), 12 deletions(-)
Index: llvm/lib/System/Unix/Path.inc
diff -u llvm/lib/System/Unix/Path.inc:1.58 llvm/lib/System/Unix/Path.inc:1.59
--- llvm/lib/System/Unix/Path.inc:1.58 Wed Aug 23 15:34:57 2006
+++ llvm/lib/System/Unix/Path.inc Thu Mar 29 11:43:20 2007
@@ -79,6 +79,12 @@
return i >= len;
}
+bool
+Path::isAbsolute() const {
+ if (path.empty())
+ return false;
+ return path[0] == '/';
+}
Path
Path::GetRootDirectory() {
Path result;
@@ -357,18 +363,22 @@
}
bool
-Path::getFileStatus(FileStatus &info, std::string *ErrStr) const {
- struct stat buf;
- if (0 != stat(path.c_str(), &buf))
- return MakeErrMsg(ErrStr,
- path + ": can't get status of file '" + path + "'");
- info.fileSize = buf.st_size;
- info.modTime.fromEpochTime(buf.st_mtime);
- info.mode = buf.st_mode;
- info.user = buf.st_uid;
- info.group = buf.st_gid;
- info.isDir = S_ISDIR(buf.st_mode);
- info.isFile = S_ISREG(buf.st_mode);
+Path::getFileStatus(FileStatus &info, bool update, std::string *ErrStr) const {
+ if (status == 0 || update) {
+ struct stat buf;
+ if (0 != stat(path.c_str(), &buf))
+ return MakeErrMsg(ErrStr, path + ": can't get status of file");
+ if (status == 0)
+ status = new FileStatus;
+ status->fileSize = buf.st_size;
+ status->modTime.fromEpochTime(buf.st_mtime);
+ status->mode = buf.st_mode;
+ status->user = buf.st_uid;
+ status->group = buf.st_gid;
+ status->isDir = S_ISDIR(buf.st_mode);
+ status->isFile = S_ISREG(buf.st_mode);
+ }
+ info = *status;
return false;
}
More information about the llvm-commits
mailing list