diff options
Diffstat (limited to 'src/cmd/gc/lex.c')
-rw-r--r-- | src/cmd/gc/lex.c | 23 |
1 files changed, 22 insertions, 1 deletions
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 +} |