From: Douglas Gregor Date: Fri, 9 Dec 2011 16:48:01 +0000 (+0000) Subject: When performing subframework header lookup, don't search for X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=efda0e8705e79a4b7de9f18b0d4618515f9e4bcc;p=clang When performing subframework header lookup, don't search for ".framework/" in the path name, because it could be ".framework\" on Windows. This whole function needs to be rewritten with PathV2. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146261 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Lex/HeaderSearch.cpp b/lib/Lex/HeaderSearch.cpp index 0071ff533c..8a73fb9565 100644 --- a/lib/Lex/HeaderSearch.cpp +++ b/lib/Lex/HeaderSearch.cpp @@ -535,6 +535,7 @@ LookupSubframeworkHeader(StringRef Filename, assert(ContextFileEnt && "No context file?"); // Framework names must have a '/' in the filename. Find it. + // FIXME: Should we permit '\' on Windows? size_t SlashPos = Filename.find('/'); if (SlashPos == StringRef::npos) return 0; @@ -542,12 +543,15 @@ LookupSubframeworkHeader(StringRef Filename, const char *ContextName = ContextFileEnt->getName(); // If the context info wasn't a framework, couldn't be a subframework. - const char *FrameworkPos = strstr(ContextName, ".framework/"); - if (FrameworkPos == 0) + const unsigned DotFrameworkLen = 10; + const char *FrameworkPos = strstr(ContextName, ".framework"); + if (FrameworkPos == 0 || + (FrameworkPos[DotFrameworkLen] != '/' && + FrameworkPos[DotFrameworkLen] != '\\')) return 0; llvm::SmallString<1024> FrameworkName(ContextName, - FrameworkPos+strlen(".framework/")); + FrameworkPos+DotFrameworkLen+1); // Append Frameworks/HIToolbox.framework/ FrameworkName += "Frameworks/";