forked from OSchip/llvm-project
[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:
parent
6350e07ecd
commit
ac08b26611
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -166,6 +166,7 @@ clang_getFile
|
|||
clang_getFileLocation
|
||||
clang_getFileName
|
||||
clang_getFileTime
|
||||
clang_getFileUniqueID
|
||||
clang_getFunctionTypeCallingConv
|
||||
clang_getIBOutletCollectionType
|
||||
clang_getIncludedFile
|
||||
|
|
Loading…
Reference in New Issue