2005-08-08 14:50:13 +02:00
|
|
|
#include "u.h"
|
|
|
|
#include "lib.h"
|
|
|
|
#include "dat.h"
|
|
|
|
#include "fns.h"
|
|
|
|
#include "error.h"
|
|
|
|
|
|
|
|
long
|
2016-01-07 15:17:21 +01:00
|
|
|
sysexits(uintptr_t *arg)
|
2005-08-08 14:50:13 +02:00
|
|
|
{
|
|
|
|
char *status;
|
|
|
|
char *inval = "invalid exit string";
|
|
|
|
char buf[ERRMAX];
|
|
|
|
|
|
|
|
status = (char*)arg[0];
|
|
|
|
if(status){
|
|
|
|
if(waserror())
|
|
|
|
status = inval;
|
|
|
|
else{
|
|
|
|
validaddr((ulong)status, 1, 0);
|
|
|
|
if(vmemchr(status, 0, ERRMAX) == 0){
|
|
|
|
memmove(buf, status, ERRMAX);
|
|
|
|
buf[ERRMAX-1] = 0;
|
|
|
|
status = buf;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
poperror();
|
|
|
|
|
|
|
|
}
|
|
|
|
pexit(status, 1);
|
|
|
|
return 0; /* not reached */
|
|
|
|
}
|
|
|
|
|