blob: e4c04cb93b2602bfa82c269ecc2c81cc3dfa5483 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
/* 0 <= mem.l <= mem.r <= mem.a */
/* add process to data structure, return index or -1 */
static int addprocess(void *p, char *service) {
unsigned int root_len, serv_len = str_len(service) + 1;
void *name;
struct process *pr;
root_len = mem.l + PROCESS_SIZE;
if (root_len + serv_len + 32 > mem.r)
{ write(1,"init: out of memory\n",20); return -1; }
mem.r -= serv_len;
++maxprocess;
pr = root;
root = mem.x + (mem.r & ~15) - root_len;
byte_copy(root, mem.l, pr);
pr = root + maxprocess;
byte_copy(pr, PROCESS_SIZE, p);
mem.l += PROCESS_SIZE;
name = mem.x + mem.r;
byte_copy(name, serv_len, service);
pr->name = process_name_set;
next_cron = 0;
return maxprocess;
}
|