BSD 3 development
[unix-history] / usr / src / cmd / cc.c
index a09c294..ce5137b 100644 (file)
@@ -9,7 +9,7 @@
 # define MAXFIL 100
 # define MAXLIB 100
 # define MAXOPT 100
 # define MAXFIL 100
 # define MAXLIB 100
 # define MAXOPT 100
-char   *tmp0;
+char   tmp0[30];
 char   *tmp1;
 char   *tmp2;
 char   *tmp3;
 char   *tmp1;
 char   *tmp2;
 char   *tmp3;
@@ -25,6 +25,7 @@ char  *av[50];
 char   *clist[MAXFIL];
 char   *llist[MAXLIB];
 char   *alist[20];
 char   *clist[MAXFIL];
 char   *llist[MAXLIB];
 char   *alist[20];
+int Wflag;
 int dflag;
 int    pflag;
 int    sflag;
 int dflag;
 int    pflag;
 int    sflag;
@@ -64,6 +65,7 @@ char *argv[]; {
                        break;
                case 'o':
                        if (++i < argc) {
                        break;
                case 'o':
                        if (++i < argc) {
+                               char t;
                                outfile = argv[i];
                                if ((t=getsuf(outfile))=='c'||t=='o') {
                                        error("Would overwrite %s", outfile);
                                outfile = argv[i];
                                if ((t=getsuf(outfile))=='c'||t=='o') {
                                        error("Would overwrite %s", outfile);
@@ -80,6 +82,10 @@ char *argv[]; {
                case 'g':
                        gflag++;
                        break;
                case 'g':
                        gflag++;
                        break;
+               case 'W':       /* deprecated */
+               case 'w':
+                       Wflag++;
+                       break;
                case 'E':
                        exflag++;
                case 'P':
                case 'E':
                        exflag++;
                case 'P':
@@ -193,7 +199,8 @@ char *argv[]; {
        if(nc==0)
                goto nocom;
        if (pflag==0) {
        if(nc==0)
                goto nocom;
        if (pflag==0) {
-               tmp0 = copy("/tmp/ctm0a");
+               FILE *c;
+               sprintf(tmp0,"/tmp/ctm%05.5da",getpid());
                while((c=fopen(tmp0, "r")) != NULL) {
                        fclose(c);
                        tmp0[9]++;
                while((c=fopen(tmp0, "r")) != NULL) {
                        fclose(c);
                        tmp0[9]++;
@@ -205,17 +212,19 @@ char *argv[]; {
                signal(SIGINT, idexit);
        if (signal(SIGTERM, SIG_IGN) != SIG_IGN)        /* terminate */
                signal(SIGTERM, idexit);
                signal(SIGINT, idexit);
        if (signal(SIGTERM, SIG_IGN) != SIG_IGN)        /* terminate */
                signal(SIGTERM, idexit);
-       (tmp1 = copy(tmp0))[8] = '1';
-       (tmp2 = copy(tmp0))[8] = '2';
-       (tmp3 = copy(tmp0))[8] = '3';
+       (tmp1 = copy(tmp0))[13] = '1';
+       (tmp2 = copy(tmp0))[13] = '2';
+       (tmp3 = copy(tmp0))[13] = '3';
        if (oflag)
        if (oflag)
-               (tmp5 = copy(tmp0))[8] = '5';
+               (tmp5 = copy(tmp0))[13] = '5';
        if (pflag==0)
        if (pflag==0)
-               (tmp4 = copy(tmp0))[8] = '4';
+               (tmp4 = copy(tmp0))[13] = '4';
        pvt = pv;
        for (i=0; i<nc; i++) {
        pvt = pv;
        for (i=0; i<nc; i++) {
-               if (nc>1)
+               if (nc>1) {
                        printf("%s:\n", clist[i]);
                        printf("%s:\n", clist[i]);
+                       fflush(stdout);
+               }
                if (getsuf(clist[i])=='s') {
                        assource = clist[i];
                        goto assemble;
                if (getsuf(clist[i])=='s') {
                        assource = clist[i];
                        goto assemble;
@@ -253,10 +262,20 @@ char *argv[]; {
                        av[3] = 0;
                if (gflag) {
                        int i;
                        av[3] = 0;
                if (gflag) {
                        int i;
+
                        i = av[3] ? 4 : 3;
                        av[i++] = "-Xg";
                        av[i] = 0;
                }
                        i = av[3] ? 4 : 3;
                        av[i++] = "-Xg";
                        av[i] = 0;
                }
+               if (Wflag) {
+                       int i;
+
+                       for (i = 3; i < 10 && av[i] != 0; i++)
+                               ;
+                       av[i] = "-W";
+                       av[++i] = 0;
+               }
+                               
                if (callsys(pass0, av)) {
                        cflag++;
                        eflag++;
                if (callsys(pass0, av)) {
                        cflag++;
                        eflag++;
@@ -338,7 +357,7 @@ dexit()
                        cunlink(tmp3);
                cunlink(tmp4);
                cunlink(tmp5);
                        cunlink(tmp3);
                cunlink(tmp4);
                cunlink(tmp5);
-               cunlink(tmp0);
+               cunlink(tmp0); 
        }
        exit(eflag);
 }
        }
        exit(eflag);
 }
@@ -393,10 +412,11 @@ callsys(f, v)
 char f[], *v[]; {
        int t, status;
 
 char f[], *v[]; {
        int t, status;
 
-       if ((t=fork())==0) {
+       if ((t=vfork())==0) {
                execv(f, v);
                printf("Can't find %s\n", f);
                execv(f, v);
                printf("Can't find %s\n", f);
-               exit(100);
+               fflush(stdout);
+               _exit(100);
        } else
                if (t == -1) {
                        printf("Try again\n");
        } else
                if (t == -1) {
                        printf("Try again\n");