static char sccsid
[] = "@(#)cc.c 3.1 %G%";
* cc - front end for C compiler
char *cpp
= "/usr/new/cpp";
char *ccom
= "/usr/new/ccom";
char *c2
= "/usr/new/c2";
char *as
= "/usr/new/as";
char *ld
= "/usr/new/ld";
char *crt0
= "/usr/new/crt0.o";
char tmp0
[30]; /* big enough for /tmp/ctm%05.5d */
char *tmp1
, *tmp2
, *tmp3
, *tmp4
, *tmp5
;
char *savestr(), *strspl(), *setsuf();
char **av
, **clist
, **llist
, **plist
;
int cflag
, eflag
, gflag
, oflag
, pflag
, sflag
, wflag
, cps8
, exflag
, proflag
;
#define cunlink(s) if (s) unlink(s)
/* ld currently adds upto 5 args; 10 is room to spare */
av
= (char **)calloc(argc
+10, sizeof (char **));
clist
= (char **)calloc(argc
, sizeof (char **));
llist
= (char **)calloc(argc
, sizeof (char **));
plist
= (char **)calloc(argc
, sizeof (char **));
for (i
= 1; i
< argc
; i
++) {
if (*argv
[i
] == '-') switch (argv
[i
][1]) {
switch (getsuf(outfile
)) {
error("-o would overwrite %s",
"cc: warning: -P option obsolete; you should use -E instead\n");
error("-t overwrites earlier option", 0);
error("-B overwrites earlier option", 0);
if (c
=='c' || c
=='s' || exflag
) {
fprintf(stderr
, "cc: warning: -g disables -O\n");
if (npassname
&& chpass
==0)
if (chpass
&& npassname
==0)
for (t
=chpass
; *t
; t
++) {
ccom
= strspl(npassname
, "ccom");
c2
= strspl(npassname
, "c2");
cpp
= strspl(npassname
, "cpp");
crt0
= cps8
? "/usr/lib/8mcrt0.o" : "/usr/new/mcrt0.o";
if (signal(SIGINT
, SIG_IGN
) != SIG_IGN
)
if (signal(SIGTERM
, SIG_IGN
) != SIG_IGN
)
sprintf(tmp0
, "/tmp/ctm%05.5d", getpid());
tmp1
= strspl(tmp0
, "1");
tmp2
= strspl(tmp0
, "2");
tmp3
= strspl(tmp0
, "3");
tmp4
= strspl(tmp0
, "4");
tmp5
= strspl(tmp0
, "5");
printf("%s:\n", clist
[i
]);
if (getsuf(clist
[i
]) == 's') {
tmp4
= setsuf(clist
[i
], 'i');
av
[0] = "cpp"; av
[1] = clist
[i
]; av
[2] = exflag
? "-" : tmp4
;
assource
= tmp3
= setsuf(clist
[i
], 's');
av
[0] = "ccom"; av
[1] = tmp4
; av
[2] = oflag
?tmp5
:tmp3
; na
= 3;
av
[0] = "c2"; av
[1] = tmp5
; av
[2] = tmp3
; av
[3] = 0;
cunlink(tmp1
); cunlink(tmp2
); cunlink(tmp4
);
av
[0] = "as"; av
[1] = "-o"; av
[2] = setsuf(clist
[i
], 'o');
av
[3] = assource
; na
= 4;
if (callsys(as
, av
) > 1) {
av
[0] = "ld"; av
[1] = "-X"; av
[2] = crt0
; na
= 3;
eflag
|= callsys(ld
, av
);
if (nc
==1 && nxo
==1 && eflag
==0)
unlink(setsuf(clist
[0], 'o'));
FILE *diag
= exflag
? stderr
: stdout
;
if (c
<= DIRSIZ
&& c
> 2 && *s
++ == '.')
printf("No more processes\n");
printf("Can't find %s\n", f
);
while (t
!= wait(&status
))
if ((t
=(status
&0377)) != 0 && t
!=14) {
printf("Fatal error in %s\n", f
);
return ((status
>>8) & 0377);
savetab
= (char *)malloc(saveleft
);
fprintf(stderr
, "ran out of memory (savestr)\n");
strncpy(savetab
, cp
, len
);