aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/System/Path.h4
-rw-r--r--lib/System/Unix/Path.inc1
-rw-r--r--lib/System/Win32/Path.inc7
3 files changed, 11 insertions, 1 deletions
diff --git a/include/llvm/System/Path.h b/include/llvm/System/Path.h
index 34373ae6a3..578bb3cca0 100644
--- a/include/llvm/System/Path.h
+++ b/include/llvm/System/Path.h
@@ -40,17 +40,19 @@ namespace sys {
uint32_t mode; ///< Mode of the file, if applicable
uint32_t user; ///< User ID of owner, if applicable
uint32_t group; ///< Group ID of owner, if applicable
+ uint64_t uniqueID; ///< A number to uniquely ID this file
bool isDir : 1; ///< True if this is a directory.
bool isFile : 1; ///< True if this is a file.
FileStatus() : fileSize(0), modTime(0,0), mode(0777), user(999),
- group(999), isDir(false) { }
+ group(999), uniqueID(0), isDir(false), isFile(false) { }
TimeValue getTimestamp() const { return modTime; }
uint64_t getSize() const { return fileSize; }
uint32_t getMode() const { return mode; }
uint32_t getUser() const { return user; }
uint32_t getGroup() const { return group; }
+ uint32_t getUniqueID() const { return uniqueID; }
};
/// This class provides an abstraction for the path to a file or directory
diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc
index b155213ec6..5557282964 100644
--- a/lib/System/Unix/Path.inc
+++ b/lib/System/Unix/Path.inc
@@ -375,6 +375,7 @@ Path::getFileStatus(FileStatus &info, bool update, std::string *ErrStr) const {
status->mode = buf.st_mode;
status->user = buf.st_uid;
status->group = buf.st_gid;
+ status->uniqueID = uint64_t(buf.st_ino);
status->isDir = S_ISDIR(buf.st_mode);
status->isFile = S_ISREG(buf.st_mode);
}
diff --git a/lib/System/Win32/Path.inc b/lib/System/Win32/Path.inc
index 1f809ecfa5..f5edaa07ed 100644
--- a/lib/System/Win32/Path.inc
+++ b/lib/System/Win32/Path.inc
@@ -319,6 +319,13 @@ Path::getFileStatus(FileStatus &info, bool update, std::string *ErrStr) const {
status->user = 9999; // Not applicable to Windows, so...
status->group = 9999; // Not applicable to Windows, so...
+ // FIXME: this is only unique if the file is accessed by the same file path.
+ // How do we do this for C:\dir\file and ..\dir\file ? Unix has inode
+ // numbers, but the concept doesn't exist in Windows.
+ status->uniqueID = 0;
+ for (unsigned i = 0; i < path.length(); ++i)
+ status->uniqueID += path[i];
+
__int64 ft = *reinterpret_cast<__int64*>(&fi.ftLastWriteTime);
status->modTime.fromWin32Time(ft);