diff options
author | Russ Cox <rsc@golang.org> | 2010-04-27 13:52:43 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2010-04-27 13:52:43 -0700 |
commit | 3e357d2ab3734962db6fe3fed429f165df7b8bcf (patch) | |
tree | 5dafe69b37e548a70db5bea68bf19b1a4992c248 | |
parent | 15c747875716528dffeb67a66c3e2d78462c237b (diff) | |
download | golang-3e357d2ab3734962db6fe3fed429f165df7b8bcf.tar.gz |
gc: fix islocalname on windows
Fixes issue 732.
R=ken2
CC=golang-dev
http://codereview.appspot.com/956050
-rw-r--r-- | src/cmd/gc/go.h | 6 | ||||
-rw-r--r-- | src/cmd/gc/lex.c | 23 |
2 files changed, 28 insertions, 1 deletions
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h index dabf5d3f5..8f7450ef4 100644 --- a/src/cmd/gc/go.h +++ b/src/cmd/gc/go.h @@ -1242,3 +1242,9 @@ int duintxx(Sym *s, int off, uint64 v, int wid); void genembedtramp(Type*, Type*, Sym*); int gen_as_init(Node*); + +enum { + SysUnix = 1<<1, + SysWindows = 1<<2, +}; +int systemtype(int); diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index 57d6e184d..f6359da56 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -24,6 +24,7 @@ main(int argc, char *argv[]) { int i, c; NodeList *l; + char *p; localpkg = mkpkg(strlit("")); localpkg->prefix = "\"\""; @@ -80,6 +81,13 @@ main(int argc, char *argv[]) if(getwd(pathname, 999) == 0) strcpy(pathname, "/???"); + if(systemtype(SysWindows)) { + // Canonicalize path by converting \ to / (Windows accepts both). + for(p=pathname; *p; p++) + if(*p == '\\') + *p = '/'; + } + fmtinstall('O', Oconv); // node opcodes fmtinstall('E', Econv); // etype opcodes fmtinstall('J', Jconv); // all the node flags @@ -239,8 +247,11 @@ addidir(char* dir) int islocalname(Strlit *name) { - if(name->len >= 1 && name->s[0] == '/') + if(systemtype(SysUnix) && name->len >= 1 && name->s[0] == '/') return 1; + if(systemtype(SysWindows) && name->len >= 3 && + isalpha(name->s[0]) && name->s[1] == ':' && name->s[2] == '/') + return 1; if(name->len >= 2 && strncmp(name->s, "./", 2) == 0) return 1; if(name->len >= 3 && strncmp(name->s, "../", 3) == 0) @@ -1662,3 +1673,13 @@ mkpackage(char* pkgname) outfile = smprint("%s.%c", namebuf, thechar); } } + +int +systemtype(int sys) +{ +#ifdef __MINGW32__ + return sys&SysWindows; +#else + return sys&SysUnix; +#endif +} |