[libclang] Introduce clang_getFileUniqueID which returns a struct

for a CXFile containing device/inode/modification time.

Intended to be useful as a key associated with a unique file across
an indexing session.

rdar://13091837

llvm-svn: 173559
This commit is contained in:
Argyrios Kyrtzidis 2013-01-26 04:52:52 +00:00
parent 6350e07ecd
commit ac08b26611
3 changed files with 35 additions and 1 deletions

View File

@ -32,7 +32,7 @@
* compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable.
*/
#define CINDEX_VERSION_MAJOR 0
#define CINDEX_VERSION_MINOR 10
#define CINDEX_VERSION_MINOR 11
#define CINDEX_VERSION_ENCODE(major, minor) ( \
((major) * 10000) \
@ -296,6 +296,24 @@ CINDEX_LINKAGE CXString clang_getFileName(CXFile SFile);
*/
CINDEX_LINKAGE time_t clang_getFileTime(CXFile SFile);
/**
* \brief Uniquely identifies a CXFile, that refers to the same underlying file,
* across an indexing session.
*/
typedef struct {
unsigned long long data[3];
} CXFileUniqueID;
/**
* \brief Retrieve the unique ID for the given \c file.
*
* \param file the file to get the ID for.
* \param outID stores the returned CXFileUniqueID.
* \returns If there was a failure getting the unique ID, returns non-zero,
* otherwise returns 0.
*/
CINDEX_LINKAGE int clang_getFileUniqueID(CXFile file, CXFileUniqueID *outID);
/**
* \brief Determine whether the given header is guarded against
* multiple inclusions, either with the conventional

View File

@ -2960,6 +2960,21 @@ unsigned clang_isFileMultipleIncludeGuarded(CXTranslationUnit tu, CXFile file) {
.isFileMultipleIncludeGuarded(FEnt);
}
int clang_getFileUniqueID(CXFile file, CXFileUniqueID *outID) {
if (!file || !outID)
return 1;
#ifdef LLVM_ON_WIN32
return 1; // inodes not supported on windows.
#else
FileEntry *FEnt = static_cast<FileEntry *>(file);
outID->data[0] = FEnt->getDevice();
outID->data[1] = FEnt->getInode();
outID->data[2] = FEnt->getModificationTime();
return 0;
#endif
}
} // end: extern "C"
//===----------------------------------------------------------------------===//

View File

@ -166,6 +166,7 @@ clang_getFile
clang_getFileLocation
clang_getFileName
clang_getFileTime
clang_getFileUniqueID
clang_getFunctionTypeCallingConv
clang_getIBOutletCollectionType
clang_getIncludedFile