]> Cypherpunks repositories - gostls13.git/commitdiff
separate local path lookup from standard package directories
authorRuss Cox <rsc@golang.org>
Fri, 26 Jun 2009 03:15:56 +0000 (20:15 -0700)
committerRuss Cox <rsc@golang.org>
Fri, 26 Jun 2009 03:15:56 +0000 (20:15 -0700)
R=ken
OCL=30760
CL=30779

src/cmd/gc/lex.c

index a5b42441001de4cab2a8ee2aa88255f4ffe52c3d..05671cc386163eb7195e5105d0b66a2566684ce9 100644 (file)
@@ -213,6 +213,19 @@ addidir(char* dir)
        (*pp)->dir = dir;
 }
 
+// is this path a local name?  begins with ./ or ../ or /
+int
+islocalname(Strlit *name)
+{
+       if(name->len >= 1 && name->s[0] == '/')
+               return 1;
+       if(name->len >= 2 && strncmp(name->s, "./", 2) == 0)
+               return 1;
+       if(name->len >= 3 && strncmp(name->s, "../", 3) == 0)
+               return 1;
+       return 0;
+}
+
 int
 findpkg(Strlit *name)
 {
@@ -225,9 +238,19 @@ findpkg(Strlit *name)
                goarch = getenv("GOARCH");
        }
 
-       // try .a before .6.  important for building libraries:
-       // if there is an array.6 in the array.a library,
-       // want to find all of array.a, not just array.6.
+       if(islocalname(name)) {
+               // try .a before .6.  important for building libraries:
+               // if there is an array.6 in the array.a library,
+               // want to find all of array.a, not just array.6.
+               snprint(namebuf, sizeof(namebuf), "%Z.a", name);
+               if(access(namebuf, 0) >= 0)
+                       return 1;
+               snprint(namebuf, sizeof(namebuf), "%Z.%c", name, thechar);
+               if(access(namebuf, 0) >= 0)
+                       return 1;
+               return 0;
+       }
+
        for(p = idirs; p != nil; p = p->link) {
                snprint(namebuf, sizeof(namebuf), "%s/%Z.a", p->dir, name);
                if(access(namebuf, 0) >= 0)
@@ -236,13 +259,6 @@ findpkg(Strlit *name)
                if(access(namebuf, 0) >= 0)
                        return 1;
        }
-
-       snprint(namebuf, sizeof(namebuf), "%Z.a", name);
-       if(access(namebuf, 0) >= 0)
-               return 1;
-       snprint(namebuf, sizeof(namebuf), "%Z.%c", name, thechar);
-       if(access(namebuf, 0) >= 0)
-               return 1;
        if(goroot != nil) {
                snprint(namebuf, sizeof(namebuf), "%s/pkg/%s_%s/%Z.a", goroot, goos, goarch, name);
                if(access(namebuf, 0) >= 0)