From: Russ Cox Date: Fri, 26 Jun 2009 03:15:56 +0000 (-0700) Subject: separate local path lookup from standard package directories X-Git-Tag: weekly.2009-11-06~1320 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=70e232e668e459c9f730a2213f8270660b36558b;p=gostls13.git separate local path lookup from standard package directories R=ken OCL=30760 CL=30779 --- diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index a5b4244100..05671cc386 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -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)