diff options
Diffstat (limited to 'src/cmd/cc')
-rw-r--r-- | src/cmd/cc/cc.h | 21 | ||||
-rw-r--r-- | src/cmd/cc/lex.c | 82 | ||||
-rw-r--r-- | src/cmd/cc/macbody | 2 |
3 files changed, 72 insertions, 33 deletions
diff --git a/src/cmd/cc/cc.h b/src/cmd/cc/cc.h index 42341a70c..2ebea6f5f 100644 --- a/src/cmd/cc/cc.h +++ b/src/cmd/cc/cc.h @@ -32,7 +32,6 @@ #include <libc.h> #include <bio.h> #include <ctype.h> -#include "compat.h" #pragma lib "../cc/cc.a$O" @@ -542,17 +541,8 @@ extern uint32 thash[]; /* * compat.c/unix.c/windows.c */ -int mywait(int*); -int mycreat(char*, int); int systemtype(int); int pathchar(void); -int myaccess(char*); -char* mygetwd(char*, int); -int myexec(char*, char*[]); -int mydup(int, int); -int myfork(void); -int mypipe(int*); -void* mysbrk(uint32); /* * parser @@ -794,3 +784,14 @@ int machcap(Node*); #pragma varargck type "O" int #pragma varargck type "T" Type* #pragma varargck type "|" int + +enum +{ + Plan9 = 1<<0, + Unix = 1<<1, + Windows = 1<<2, +}; +int pathchar(void); +int systemtype(int); +void* alloc(int32 n); +void* allocn(void*, int32, int32); diff --git a/src/cmd/cc/lex.c b/src/cmd/cc/lex.c index c5126b7ed..b3216af44 100644 --- a/src/cmd/cc/lex.c +++ b/src/cmd/cc/lex.c @@ -35,6 +35,19 @@ #define CPP "/bin/cpp" #endif +int +systemtype(int sys) +{ + + return sys&Plan9; +} + +int +pathchar(void) +{ + return '/'; +} + /* * known debug flags * -a acid declaration output @@ -67,7 +80,7 @@ void main(int argc, char *argv[]) { char *defs[50], *p; - int nproc, nout, status, i, c, ndef; + int nproc, nout, i, c, ndef; memset(debug, 0, sizeof(debug)); tinit(); @@ -132,18 +145,13 @@ main(int argc, char *argv[]) c = 0; nout = 0; for(;;) { + Waitmsg *w; + while(nout < nproc && argc > 0) { - i = myfork(); + i = fork(); if(i < 0) { - i = mywait(&status); - if(i < 0) { - print("cannot create a process\n"); - errorexit(); - } - if(status) - c++; - nout--; - continue; + print("cannot create a process\n"); + errorexit(); } if(i == 0) { fprint(2, "%s:\n", *argv); @@ -155,13 +163,13 @@ main(int argc, char *argv[]) argc--; argv++; } - i = mywait(&status); - if(i < 0) { + w = wait(); + if(w == nil) { if(c) errorexit(); exits(0); } - if(status) + if(w->msg[0]) c++; nout--; } @@ -236,7 +244,7 @@ compile(char *file, char **defs, int ndef) dup(2, 1); } } else { - c = mycreate(outfile, 0664); + c = create(outfile, OWRITE, 0664); if(c < 0) { diag(Z, "cannot open %s - %r", outfile); outfile = 0; @@ -254,21 +262,21 @@ compile(char *file, char **defs, int ndef) diag(Z, "-p option not supported on windows"); errorexit(); } - if(myaccess(file) < 0) { + if(access(file, AREAD) < 0) { diag(Z, "%s does not exist", file); errorexit(); } - if(mypipe(fd) < 0) { + if(pipe(fd) < 0) { diag(Z, "pipe failed"); errorexit(); } - switch(myfork()) { + switch(fork()) { case -1: diag(Z, "fork failed"); errorexit(); case 0: close(fd[0]); - mydup(fd[1], 1); + dup(fd[1], 1); close(fd[1]); av[0] = CPP; i = 1; @@ -296,7 +304,7 @@ compile(char *file, char **defs, int ndef) fprint(2, "%s ", av[c]); fprint(2, "\n"); } - myexec(av[0], av); + exec(av[0], av); fprint(2, "can't exec C preprocessor %s: %r\n", CPP); errorexit(); default: @@ -1266,9 +1274,9 @@ cinit(void) dclstack = D; pathname = allocn(pathname, 0, 100); - if(mygetwd(pathname, 99) == 0) { + if(getwd(pathname, 99) == 0) { pathname = allocn(pathname, 100, 900); - if(mygetwd(pathname, 999) == 0) + if(getwd(pathname, 999) == 0) strcpy(pathname, "/???"); } @@ -1540,3 +1548,33 @@ setinclude(char *p) p = e+1; } } + +void* +alloc(int32 n) +{ + void *p; + + p = malloc(n); + if(p == nil) { + print("alloc out of mem\n"); + exit(1); + } + memset(p, 0, n); + return p; +} + +void* +allocn(void *p, int32 n, int32 d) +{ + + if(p == nil) + return alloc(d); + p = realloc(p, n+d); + if(p == nil) { + print("allocn out of mem\n"); + exit(1); + } + if(d > 0) + memset((char*)p+n, 0, d); + return p; +} diff --git a/src/cmd/cc/macbody b/src/cmd/cc/macbody index e23d1bdc9..64f04129f 100644 --- a/src/cmd/cc/macbody +++ b/src/cmd/cc/macbody @@ -579,7 +579,7 @@ macinc(void) if(strcmp(symb, "./") == 0) symb[0] = 0; strcat(symb, str); - f = myopen(symb); + f = open(symb, OREAD); if(f >= 0) break; } |