]> granicus.if.org Git - clang/commitdiff
When performing subframework header lookup, don't search for
authorDouglas Gregor <dgregor@apple.com>
Fri, 9 Dec 2011 16:48:01 +0000 (16:48 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 9 Dec 2011 16:48:01 +0000 (16:48 +0000)
".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

lib/Lex/HeaderSearch.cpp

index 0071ff533c96cd82d5a79178f149c24456111871..8a73fb956585dd7a2717cbf6e3bcc5274a3423ce 100644 (file)
@@ -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/";