xref: /plan9/sys/src/cmd/rc/subr.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier #include "rc.h"
23e12c5d1SDavid du Colombier #include "exec.h"
33e12c5d1SDavid du Colombier #include "io.h"
43e12c5d1SDavid du Colombier #include "fns.h"
53e12c5d1SDavid du Colombier char *emalloc(long n){
63e12c5d1SDavid du Colombier 	char *p=(char *)Malloc(n);
73e12c5d1SDavid du Colombier 	if(p==0) panic("Can't malloc %d bytes", n);
83e12c5d1SDavid du Colombier /*	if(err){ pfmt(err, "malloc %d->%p\n", n, p); flush(err); } /**/
93e12c5d1SDavid du Colombier 	return p;
103e12c5d1SDavid du Colombier }
113e12c5d1SDavid du Colombier void efree(char *p)
123e12c5d1SDavid du Colombier {
133e12c5d1SDavid du Colombier /*	pfmt(err, "free %p\n", p); flush(err); /**/
143e12c5d1SDavid du Colombier 	if(p) free(p);
153e12c5d1SDavid du Colombier 	else pfmt(err, "free 0\n");
163e12c5d1SDavid du Colombier }
17*219b2ee8SDavid du Colombier extern int lastword, lastdol;
183e12c5d1SDavid du Colombier void yyerror(char *m)
193e12c5d1SDavid du Colombier {
203e12c5d1SDavid du Colombier 	pfmt(err, "rc: ");
213e12c5d1SDavid du Colombier 	if(runq->cmdfile) pfmt(err, "file %s: ", runq->cmdfile);
223e12c5d1SDavid du Colombier 	if(!runq->iflag) pfmt(err, "line %d: ", runq->lineno);
233e12c5d1SDavid du Colombier 	if(tok[0] && tok[0]!='\n') pfmt(err, "token %q: ", tok);
243e12c5d1SDavid du Colombier 	pfmt(err, "%s\n", m);
253e12c5d1SDavid du Colombier 	flush(err);
26*219b2ee8SDavid du Colombier 	lastword=0;
27*219b2ee8SDavid du Colombier 	lastdol=0;
283e12c5d1SDavid du Colombier 	while(lastc!='\n' && lastc!=EOF) advance();
293e12c5d1SDavid du Colombier 	nerror++;
303e12c5d1SDavid du Colombier }
313e12c5d1SDavid du Colombier char *bp;
323e12c5d1SDavid du Colombier void iacvt(int n){
333e12c5d1SDavid du Colombier 	if(n<0){
343e12c5d1SDavid du Colombier 		*bp++='-';
353e12c5d1SDavid du Colombier 		n=-n;	/* doesn't work for n==-inf */
363e12c5d1SDavid du Colombier 	}
373e12c5d1SDavid du Colombier 	if(n/10)
383e12c5d1SDavid du Colombier 		iacvt(n/10);
393e12c5d1SDavid du Colombier 	*bp++=n%10+'0';
403e12c5d1SDavid du Colombier }
413e12c5d1SDavid du Colombier void itoa(char *s, int n)
423e12c5d1SDavid du Colombier {
433e12c5d1SDavid du Colombier 	bp=s;
443e12c5d1SDavid du Colombier 	iacvt(n);
453e12c5d1SDavid du Colombier 	*bp='\0';
463e12c5d1SDavid du Colombier }
473e12c5d1SDavid du Colombier void panic(char *s, int n)
483e12c5d1SDavid du Colombier {
493e12c5d1SDavid du Colombier 	pfmt(err, "rc: ");
503e12c5d1SDavid du Colombier 	pfmt(err, s, n);
513e12c5d1SDavid du Colombier 	pchr(err, '\n');
523e12c5d1SDavid du Colombier 	flush(err);
533e12c5d1SDavid du Colombier 	Abort();
543e12c5d1SDavid du Colombier }
55