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