xref: /plan9-contrib/sys/src/cmd/rc/subr.c (revision a84536681645e23c630ce4ef2e5c3b284d4c590b)
1 #include "rc.h"
2 #include "exec.h"
3 #include "io.h"
4 #include "fns.h"
5 
6 char*
7 emalloc(long n)
8 {
9 	char *p = (char *)Malloc(n);
10 	if(p==0)
11 		panic("Can't malloc %d bytes", n);
12 /*	if(err){ pfmt(err, "malloc %d->%p\n", n, p); flush(err); } /**/
13 	return p;
14 }
15 
16 void
17 efree(char *p)
18 {
19 /*	pfmt(err, "free %p\n", p); flush(err); /**/
20 	if(p)
21 		free(p);
22 	else pfmt(err, "free 0\n");
23 }
24 extern int lastword, lastdol;
25 
26 void
27 yyerror(char *m)
28 {
29 	pfmt(err, "rc: ");
30 	if(runq->cmdfile && !runq->iflag)
31 		pfmt(err, "%s:%d: ", runq->cmdfile, runq->lineno);
32 	else if(runq->cmdfile)
33 		pfmt(err, "%s: ", runq->cmdfile);
34 	else if(!runq->iflag)
35 		pfmt(err, "line %d: ", runq->lineno);
36 	if(tok[0] && tok[0]!='\n')
37 		pfmt(err, "token %q: ", tok);
38 	pfmt(err, "%s\n", m);
39 	flush(err);
40 	lastword = 0;
41 	lastdol = 0;
42 	while(lastc!='\n' && lastc!=EOF) advance();
43 	nerror++;
44 	setvar("status", newword(m, (word *)0));
45 }
46 char *bp;
47 
48 static void
49 iacvt(int n)
50 {
51 	if(n<0){
52 		*bp++='-';
53 		n=-n;	/* doesn't work for n==-inf */
54 	}
55 	if(n/10)
56 		iacvt(n/10);
57 	*bp++=n%10+'0';
58 }
59 
60 void
61 inttoascii(char *s, long n)
62 {
63 	bp = s;
64 	iacvt(n);
65 	*bp='\0';
66 }
67 
68 void
69 panic(char *s, int n)
70 {
71 	pfmt(err, "rc: ");
72 	pfmt(err, s, n);
73 	pchr(err, '\n');
74 	flush(err);
75 	Abort();
76 }
77