xref: /plan9/sys/src/cmd/unix/drawterm/kern/sysproc.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 long
sysexits(ulong * arg)8*8ccd4a63SDavid du Colombier sysexits(ulong *arg)
9*8ccd4a63SDavid du Colombier {
10*8ccd4a63SDavid du Colombier 	char *status;
11*8ccd4a63SDavid du Colombier 	char *inval = "invalid exit string";
12*8ccd4a63SDavid du Colombier 	char buf[ERRMAX];
13*8ccd4a63SDavid du Colombier 
14*8ccd4a63SDavid du Colombier 	status = (char*)arg[0];
15*8ccd4a63SDavid du Colombier 	if(status){
16*8ccd4a63SDavid du Colombier 		if(waserror())
17*8ccd4a63SDavid du Colombier 			status = inval;
18*8ccd4a63SDavid du Colombier 		else{
19*8ccd4a63SDavid du Colombier 			validaddr((ulong)status, 1, 0);
20*8ccd4a63SDavid du Colombier 			if(vmemchr(status, 0, ERRMAX) == 0){
21*8ccd4a63SDavid du Colombier 				memmove(buf, status, ERRMAX);
22*8ccd4a63SDavid du Colombier 				buf[ERRMAX-1] = 0;
23*8ccd4a63SDavid du Colombier 				status = buf;
24*8ccd4a63SDavid du Colombier 			}
25*8ccd4a63SDavid du Colombier 		}
26*8ccd4a63SDavid du Colombier 		poperror();
27*8ccd4a63SDavid du Colombier 
28*8ccd4a63SDavid du Colombier 	}
29*8ccd4a63SDavid du Colombier 	pexit(status, 1);
30*8ccd4a63SDavid du Colombier 	return 0;		/* not reached */
31*8ccd4a63SDavid du Colombier }
32*8ccd4a63SDavid du Colombier 
33