Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include "lib.h"
2
#include "sys9.h"
3
#include <stdlib.h>
4
#include <string.h>
5
#include <unistd.h>
6
#include <signal.h>
7
 
8
int _finishing = 0;
9
int _sessleader = 0;
10
 
11
static char exitstatus[ERRMAX];
12
 
13
void
14
_exit(int status)
15
{
16
	_finish(status, 0);
17
}
18
 
19
void
20
_finish(int status, char *term)
21
{
22
	char *cp;
23
 
24
	if(_finishing)
25
		_EXITS(exitstatus);
26
	_finishing = 1;
27
	if(status){
28
		cp = _ultoa(exitstatus, status & 0xFF);
29
		*cp = 0;
30
	}else if(term){
31
		strncpy(exitstatus, term, ERRMAX);
32
		exitstatus[ERRMAX-1] = '\0';
33
	}
34
	if(_sessleader)
35
		kill(0, SIGTERM);
36
	_EXITS(exitstatus);
37
}
38
 
39
/* emulate: return p+sprintf(p, "%uld", v) */
40
#define IDIGIT 15
41
char *
42
_ultoa(char *p, unsigned long v)
43
{
44
	char s[IDIGIT];
45
	int n, i;
46
 
47
	s[IDIGIT-1] = 0;
48
	for(i = IDIGIT-2; i; i--){
49
		n = v % 10;
50
		s[i] = n + '0';
51
		v = v / 10;
52
		if(v == 0)
53
			break;
54
	}
55
	strcpy(p, s+i);
56
	return p + (IDIGIT-1-i);
57
}