[Profile] introduce reusable internal interfaces to find dir separator \NFC

llvm-svn: 276027
This commit is contained in:
Xinliang David Li 2016-07-19 20:48:00 +00:00
parent 3b059841ff
commit b6d43b7994
3 changed files with 31 additions and 5 deletions

View File

@ -229,11 +229,7 @@ static void truncateCurrentFile(void) {
return; return;
/* Create the directory holding the file, if needed. */ /* Create the directory holding the file, if needed. */
if (strchr(Filename, DIR_SEPARATOR) if (lprofFindFirstDirSeparator(Filename)) {
#if defined(DIR_SEPARATOR_2)
|| strchr(Filename, DIR_SEPARATOR_2)
#endif
) {
char *Copy = (char *)COMPILER_RT_ALLOCA(Length + 1); char *Copy = (char *)COMPILER_RT_ALLOCA(Length + 1);
strncpy(Copy, Filename, Length + 1); strncpy(Copy, Filename, Length + 1);
__llvm_profile_recursive_mkdir(Copy); __llvm_profile_recursive_mkdir(Copy);

View File

@ -184,3 +184,26 @@ lprofApplyPathPrefix(char *Dest, const char *PathStr, const char *Prefix,
memcpy(Dest + PrefixLen, StrippedPathStr, strlen(StrippedPathStr) + 1); memcpy(Dest + PrefixLen, StrippedPathStr, strlen(StrippedPathStr) + 1);
} }
COMPILER_RT_VISIBILITY const char *
lprofFindFirstDirSeparator(const char *Path) {
const char *Sep;
Sep = strchr(Path, DIR_SEPARATOR);
if (Sep)
return Sep;
#if defined(DIR_SEPARATOR_2)
Sep = strchr(Path, DIR_SEPARATOR_2);
#endif
return Sep;
}
COMPILER_RT_VISIBILITY const char *lprofFindLastDirSeparator(const char *Path) {
const char *Sep;
Sep = strrchr(Path, DIR_SEPARATOR);
if (Sep)
return Sep;
#if defined(DIR_SEPARATOR_2)
Sep = strrchr(Path, DIR_SEPARATOR_2);
#endif
return Sep;
}

View File

@ -39,6 +39,13 @@ const char *lprofGetPathPrefix(int *PrefixStrip, size_t *PrefixLen);
void lprofApplyPathPrefix(char *Dest, const char *PathStr, const char *Prefix, void lprofApplyPathPrefix(char *Dest, const char *PathStr, const char *Prefix,
size_t PrefixLen, int PrefixStrip); size_t PrefixLen, int PrefixStrip);
/* Returns a pointer to the first occurrence of \c DIR_SEPARATOR char in
* the string \c Path, or NULL if the char is not found. */
const char *lprofFindFirstDirSeparator(const char *Path);
/* Returns a pointer to the last occurrence of \c DIR_SEPARATOR char in
* the string \c Path, or NULL if the char is not found. */
const char *lprofFindLastDirSeparator(const char *Path);
int lprofGetHostName(char *Name, int Len); int lprofGetHostName(char *Name, int Len);
unsigned lprofBoolCmpXchg(void **Ptr, void *OldV, void *NewV); unsigned lprofBoolCmpXchg(void **Ptr, void *OldV, void *NewV);