xref: /plan9/sys/src/cmd/unix/drawterm/kern/waserror.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include "u.h"
2*8ccd4a63SDavid du Colombier #include "lib.h"
3*8ccd4a63SDavid du Colombier #include "dat.h"
4*8ccd4a63SDavid du Colombier #include "fns.h"
5*8ccd4a63SDavid du Colombier #include "error.h"
6*8ccd4a63SDavid du Colombier 
7*8ccd4a63SDavid du Colombier Label*
pwaserror(void)8*8ccd4a63SDavid du Colombier pwaserror(void)
9*8ccd4a63SDavid du Colombier {
10*8ccd4a63SDavid du Colombier 	if(up->nerrlab == NERR)
11*8ccd4a63SDavid du Colombier 		panic("error stack overflow");
12*8ccd4a63SDavid du Colombier 	return &up->errlab[up->nerrlab++];
13*8ccd4a63SDavid du Colombier }
14*8ccd4a63SDavid du Colombier 
15*8ccd4a63SDavid du Colombier void
nexterror(void)16*8ccd4a63SDavid du Colombier nexterror(void)
17*8ccd4a63SDavid du Colombier {
18*8ccd4a63SDavid du Colombier 	longjmp(up->errlab[--up->nerrlab].buf, 1);
19*8ccd4a63SDavid du Colombier }
20*8ccd4a63SDavid du Colombier 
21*8ccd4a63SDavid du Colombier void
error(char * e)22*8ccd4a63SDavid du Colombier error(char *e)
23*8ccd4a63SDavid du Colombier {
24*8ccd4a63SDavid du Colombier 	kstrcpy(up->errstr, e, ERRMAX);
25*8ccd4a63SDavid du Colombier 	setjmp(up->errlab[NERR-1].buf);
26*8ccd4a63SDavid du Colombier 	nexterror();
27*8ccd4a63SDavid du Colombier }
28