diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/rc/subr.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/rc/subr.c')
-rwxr-xr-x | sys/src/cmd/rc/subr.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/sys/src/cmd/rc/subr.c b/sys/src/cmd/rc/subr.c new file mode 100755 index 000000000..48e8cb091 --- /dev/null +++ b/sys/src/cmd/rc/subr.c @@ -0,0 +1,77 @@ +#include "rc.h" +#include "exec.h" +#include "io.h" +#include "fns.h" + +void * +emalloc(long n) +{ + void *p = Malloc(n); + + if(p==0) + panic("Can't malloc %d bytes", n); +/* if(err){ pfmt(err, "malloc %d->%p\n", n, p); flush(err); } /**/ + return p; +} + +void +efree(void *p) +{ +/* pfmt(err, "free %p\n", p); flush(err); /**/ + if(p) + free(p); + else pfmt(err, "free 0\n"); +} +extern int lastword, lastdol; + +void +yyerror(char *m) +{ + pfmt(err, "rc: "); + if(runq->cmdfile && !runq->iflag) + pfmt(err, "%s:%d: ", runq->cmdfile, runq->lineno); + else if(runq->cmdfile) + pfmt(err, "%s: ", runq->cmdfile); + else if(!runq->iflag) + pfmt(err, "line %d: ", runq->lineno); + if(tok[0] && tok[0]!='\n') + pfmt(err, "token %q: ", tok); + pfmt(err, "%s\n", m); + flush(err); + lastword = 0; + lastdol = 0; + while(lastc!='\n' && lastc!=EOF) advance(); + nerror++; + setvar("status", newword(m, (word *)0)); +} +char *bp; + +static void +iacvt(int n) +{ + if(n<0){ + *bp++='-'; + n=-n; /* doesn't work for n==-inf */ + } + if(n/10) + iacvt(n/10); + *bp++=n%10+'0'; +} + +void +inttoascii(char *s, long n) +{ + bp = s; + iacvt(n); + *bp='\0'; +} + +void +panic(char *s, int n) +{ + pfmt(err, "rc: "); + pfmt(err, s, n); + pchr(err, '\n'); + flush(err); + Abort(); +} |